diff --git a/.env b/.env deleted file mode 100644 index 9c26e43..0000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -VITE_STAC_NATURAL_QUERY_API=https://api.stac-semantic-search.k8s.labs.ds.io diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..5493dc4 --- /dev/null +++ b/.env.example @@ -0,0 +1,6 @@ +# STAC Natural Query API endpoint +VITE_STAC_NATURAL_QUERY_API=https://api.stac-semantic-search.k8s.labs.ds.io + +# Base URL for STAC Browser external links +# Default: https://radiantearth.github.io/stac-browser/#/external/ +VITE_STAC_BROWSER_URL="https://radiantearth.github.io/stac-browser/#/external/" diff --git a/.gitignore b/.gitignore index 2d7b7c0..aae8078 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ dist-ssr *.sw? tests/**/__screenshots__/ codebook.toml +.env diff --git a/package.json b/package.json index 3b55513..344e190 100644 --- a/package.json +++ b/package.json @@ -35,11 +35,12 @@ "dependencies": { "@chakra-ui/react": "^3.31.0", "@deck.gl/core": "^9.2.5", + "@deck.gl/extensions": "^9.2.5", "@deck.gl/geo-layers": "^9.2.5", "@deck.gl/layers": "^9.2.5", "@deck.gl/mapbox": "^9.2.5", + "@deck.gl/mesh-layers": "^9.2.5", "@developmentseed/deck.gl-geotiff": "^0.1.0", - "@developmentseed/deck.gl-raster": "^0.1.0", "@duckdb/duckdb-wasm": "^1.32.0", "@emotion/react": "^11.13.5", "@geoarrow/deck.gl-layers": "^0.3.0", @@ -60,8 +61,10 @@ "react-icons": "^5.5.0", "react-map-gl": "^8.1.0", "react-markdown": "^10.1.0", + "shiki": "^3.21.0", "stac-ts": "^1.0.4", - "stac-wasm": "^0.0.3" + "stac-wasm": "^0.0.3", + "zustand": "^5.0.10" }, "devDependencies": { "@eslint/js": "^9.39.2", diff --git a/src/app.tsx b/src/app.tsx index 5c6e60e..c3d072e 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,123 +1,47 @@ -import { useEffect, useMemo, useState } from "react"; -import { Box, Container, FileUpload, useFileUpload } from "@chakra-ui/react"; -import type { StacCollection, StacItem } from "stac-ts"; +import { useEffect } from "react"; +import { MapProvider } from "react-map-gl/maplibre"; +import { Box, Container } from "@chakra-ui/react"; +import Map from "./components/map"; +import Overlay from "./components/overlay"; import { Toaster } from "./components/ui/toaster"; -import useHrefParam from "./hooks/href-param"; -import useStacChildren from "./hooks/stac-children"; -import useStacFilters from "./hooks/stac-filters"; -import useStacValue from "./hooks/stac-value"; -import Map from "./layers/map"; -import Overlay from "./layers/overlay"; -import type { BBox2D, Color } from "./types/map"; -import type { DatetimeBounds, StacValue } from "./types/stac"; -import getDateTimes from "./utils/datetimes"; -import { getCogHref } from "./utils/stac"; -import getDocumentTitle from "./utils/title"; - -// TODO make this configurable by the user. -const lineColor: Color = [207, 63, 2, 100]; -const fillColor: Color = [207, 63, 2, 50]; +import { useStore } from "./store"; +import { getCurrentHref } from "./utils/href"; export default function App() { - // User state - const { href, setHref } = useHrefParam(); - const fileUpload = useFileUpload({ - maxFiles: 1, - onFileChange: (details) => { - if (details.acceptedFiles.length === 1) { - setHref(details.acceptedFiles[0].name); - } - }, - }); - const [userCollections, setCollections] = useState(); - const [userItems, setItems] = useState(); - const [picked, setPicked] = useState(); - const [bbox, setBbox] = useState(); - const [datetimeBounds, setDatetimeBounds] = useState(); - const [filter, setFilter] = useState(true); - const [stacGeoparquetItemId, setStacGeoparquetItemId] = useState(); - const [cogHref, setcogHref] = useState(); - - // Derived state - const { - value, - error, - items: linkedItems, - geoparqetTable, - stacGeoparquetItem, - } = useStacValue({ - href, - fileUpload, - datetimeBounds: filter ? datetimeBounds : undefined, - stacGeoparquetItemId, - }); - const collectionsLink = value?.links?.find((link) => link.rel === "data"); - const { catalogs, collections: linkedCollections } = useStacChildren({ - value, - enabled: !!value && !collectionsLink, - }); - const collections = collectionsLink ? userCollections : linkedCollections; - const items = userItems || linkedItems; - const { filteredCollections, filteredItems } = useStacFilters({ - collections, - items, - filter, - bbox, - datetimeBounds, - }); - - const datetimes = useMemo( - () => (value ? getDateTimes(value, items, collections) : null), - [value, items, collections] - ); + const href = useStore((state) => state.href); + const setHref = useStore((state) => state.setHref); - // Effects useEffect(() => { - document.title = getDocumentTitle(value); - }, [value]); + if (href && getCurrentHref() != href) { + history.pushState(null, "", "?href=" + href); + } else if (href === "") { + history.pushState(null, "", location.pathname); + } + }, [href]); useEffect(() => { - setPicked(undefined); - setItems(undefined); - setDatetimeBounds(undefined); - setcogHref(value && getCogHref(value)); - }, [value]); - - useEffect(() => { - setcogHref(picked && getCogHref(picked)); - }, [picked]); + function handlePopState() { + setHref(getCurrentHref() ?? ""); + } + window.addEventListener("popstate", handlePopState); + + if (getCurrentHref()) { + try { + new URL(getCurrentHref()); + } catch { + history.pushState(null, "", location.pathname); + } + } - useEffect(() => { - setPicked(stacGeoparquetItem); - }, [stacGeoparquetItem]); + return () => { + window.removeEventListener("popstate", handlePopState); + }; + }, [setHref]); return ( - <> + - - - - - + - + - - + + ); } diff --git a/src/components/assets.tsx b/src/components/assets.tsx new file mode 100644 index 0000000..32ab50a --- /dev/null +++ b/src/components/assets.tsx @@ -0,0 +1,111 @@ +import { useEffect, useState } from "react"; +import { LuDownload, LuFileImage } from "react-icons/lu"; +import { + Badge, + ButtonGroup, + Clipboard, + Group, + Heading, + HStack, + IconButton, + RadioCard, + Stack, +} from "@chakra-ui/react"; +import type { StacAsset } from "stac-ts"; +import { useStore } from "../store"; + +export default function Assets({ + assets, +}: { + assets: { [k: string]: StacAsset }; +}) { + const setGeotiffHref = useStore((store) => store.setGeotiffHref); + let defaultValue = null; + for (const [key, asset] of Object.entries(assets)) { + if (!defaultValue && isGeotiff(asset)) { + defaultValue = key; + } + if (defaultValue && isGeotiff(asset) && asset.roles?.includes("visual")) { + defaultValue = key; + } + } + const [value, setValue] = useState(defaultValue); + + useEffect(() => { + if (value) { + setGeotiffHref(assets[value]?.href); + } else { + setGeotiffHref(null); + } + }, [assets, value, setGeotiffHref]); + + return ( + + + + Assets + + + setValue(e.value)} + size={"sm"} + > + + {Object.entries(assets).map(([key, asset]) => ( + + ))} + + + + ); +} + +function Asset({ assetKey, asset }: { assetKey: string; asset: StacAsset }) { + const scheme = asset.href.split(":").at(0); + + return ( + + + + + {asset.title || assetKey} + + {scheme} + {asset.type && {asset.type}} + + + + + + + + + + + + + + {scheme?.startsWith("http") && ( + + + + + + )} + + + + ); +} + +function isGeotiff(asset: StacAsset) { + return ( + asset.type?.startsWith("image/tiff; application=geotiff") && + asset.href.startsWith("http") + ); +} diff --git a/src/components/breadcrumbs.tsx b/src/components/breadcrumbs.tsx deleted file mode 100644 index 0949769..0000000 --- a/src/components/breadcrumbs.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { Breadcrumb } from "@chakra-ui/react"; -import type { StacValue } from "../types/stac"; - -export default function Breadcrumbs({ - value, - picked, - setPicked, - setHref, -}: { - value: StacValue; - picked: StacValue | undefined; - setPicked: (picked: StacValue | undefined) => void; - setHref: (href: string | undefined) => void; -}) { - let selfHref; - let rootHref; - let parentHref; - if (value.links) { - for (const link of value.links) { - switch (link.rel) { - case "self": - selfHref = link.href; - break; - case "parent": - parentHref = link.href; - break; - case "root": - rootHref = link.href; - break; - } - } - } - const breadcrumbs = []; - if (rootHref && selfHref != rootHref) { - breadcrumbs.push( - - ); - } - if (parentHref && selfHref != parentHref && rootHref != parentHref) { - breadcrumbs.push( - - ); - } - if (picked) { - breadcrumbs.push( - - { - e.preventDefault(); - setPicked(undefined); - }} - > - {getStacType(value)} - - - ); - breadcrumbs.push( - - - {"Picked " + getStacType(picked).toLowerCase()} - - - ); - } else { - breadcrumbs.push( - - {getStacType(value)} - - ); - } - return ( - - - {breadcrumbs.flatMap((value, i) => [ - value, - i < breadcrumbs.length - 1 && ( - - ), - ])} - - - ); -} - -function BreadcrumbItem({ - href, - setHref, - text, -}: { - href: string; - setHref: (href: string | undefined) => void; - text: string; -}) { - return ( - - { - e.preventDefault(); - setHref(href); - }} - > - {text} - - - ); -} - -function getStacType(value: StacValue) { - switch (value.type) { - case "Feature": - return "Item"; - case "FeatureCollection": - return "Item collection"; - case "Catalog": - case "Collection": - return value.type; - default: - return "Unknown"; - } -} diff --git a/src/components/cards/asset.tsx b/src/components/cards/asset.tsx deleted file mode 100644 index 6f3b5ca..0000000 --- a/src/components/cards/asset.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { useState } from "react"; -import { LuDownload } from "react-icons/lu"; -import { - Button, - ButtonGroup, - Card, - Checkbox, - Collapsible, - DataList, - HStack, - Image, - Span, -} from "@chakra-ui/react"; -import type { StacAsset } from "stac-ts"; -import { isGeoTiff } from "../../utils/stac"; -import Properties from "../sections/properties"; - -export default function AssetCard({ - asset, - cogHref, - setcogHref, -}: { - asset: StacAsset; - cogHref: string | undefined; - setcogHref: (href: string | undefined) => void; -}) { - const [imageError, setImageError] = useState(false); - // eslint-disable-next-line - const { href, roles, type, title, ...properties } = asset; - - const checked = cogHref === asset.href; - - return ( - - - {asset.title && {asset.title}} - - - {!imageError && ( - setImageError(true)} /> - )} - - {asset.roles && ( - - Roles - {asset.roles?.join(", ")} - - )} - {asset.type && ( - - Type - {asset.type} - - )} - - {Object.keys(properties).length > 0 && ( - - Properties - - - - - )} - - {isGeoTiff(asset) && ( - { - if (e.checked) setcogHref(asset.href); - else setcogHref(undefined); - }} - > - - - Visualize - - )} - - - - - - - - ); -} diff --git a/src/components/cards/catalog.tsx b/src/components/cards/catalog.tsx deleted file mode 100644 index 2798839..0000000 --- a/src/components/cards/catalog.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { MarkdownHooks } from "react-markdown"; -import { Card, Link, Stack, Text } from "@chakra-ui/react"; -import type { StacCatalog } from "stac-ts"; - -export default function CatalogCard({ - catalog, - setHref, -}: { - catalog: StacCatalog; - setHref: (href: string | undefined) => void; -}) { - const selfHref = catalog.links.find((link) => link.rel === "self")?.href; - return ( - - - - selfHref && setHref(selfHref)}> - {catalog.title || catalog.id} - - - - - - {catalog.description} - - - - - - ); -} diff --git a/src/components/cards/collection.tsx b/src/components/cards/collection.tsx deleted file mode 100644 index db00071..0000000 --- a/src/components/cards/collection.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { MarkdownHooks } from "react-markdown"; -import { Card, Link, Stack, Text } from "@chakra-ui/react"; -import type { StacCollection } from "stac-ts"; -import { SpatialExtent, TemporalExtent } from "../extent"; - -export default function CollectionCard({ - collection, - setHref, - footer, -}: { - collection: StacCollection; - setHref: (href: string | undefined) => void; - footer?: string; -}) { - const selfHref = collection.links.find((link) => link.rel === "self")?.href; - return ( - - - - selfHref && setHref(selfHref)}> - {collection.title || collection.id} - - - - - - {collection.description} - - - {collection.extent?.temporal?.interval && ( - - )} - {collection.extent?.spatial?.bbox && ( - - )} - - - - {footer && ( - - {footer} - - )} - - ); -} diff --git a/src/components/children.tsx b/src/components/children.tsx new file mode 100644 index 0000000..6ca40df --- /dev/null +++ b/src/components/children.tsx @@ -0,0 +1,104 @@ +import { useEffect } from "react"; +import { LuFolder } from "react-icons/lu"; +import { List, SkeletonText, Stack } from "@chakra-ui/react"; +import type { StacLink } from "stac-ts"; +import CollectionFilter from "./collection-filter"; +import { type ListOrCard, Section } from "./section"; +import SkeletonCard from "./skeleton-card"; +import ValueCard from "./value-card"; +import ValueListItem from "./value-list-item"; +import { useStacJson } from "../hooks/stac"; +import { useStore } from "../store"; + +export default function Children({ links }: { links: StacLink[] }) { + const collections = useStore((store) => store.collections); + const filteredCollections = useStore((store) => store.filteredCollections); + + return ( +
} + title="Children" + count={collections?.length} + filteredCount={filteredCollections?.length} + > + {(listOrCard) => ( + <> + + + + )} +
+ ); +} + +function ChildrenValues({ + listOrCard, + links, +}: { + listOrCard: ListOrCard; + links: StacLink[]; +}) { + if (listOrCard === "list") { + return ( + + {links.map((link) => ( + + ))} + + ); + } else { + return ( + + {links.map((link) => ( + + ))} + + ); + } +} + +function ChildCard({ link }: { link: StacLink }) { + const result = useStacJson({ href: link.href }); + const addCollection = useStore((store) => store.addCollection); + const filteredCollections = useStore((store) => store.filteredCollections); + + useEffect(() => { + if (result.data?.type === "Collection") addCollection(result.data); + }, [result.data, addCollection]); + + if (result.isFetching) { + return ; + } else if (result.data) { + if ( + result.data.type === "Collection" && + filteredCollections && + !filteredCollections.includes(result.data) + ) { + return null; + } + return ; + } +} + +function ChildListItem({ link }: { link: StacLink }) { + const result = useStacJson({ href: link.href }); + const addCollection = useStore((store) => store.addCollection); + const filteredCollections = useStore((store) => store.filteredCollections); + + useEffect(() => { + if (result.data?.type === "Collection") addCollection(result.data); + }, [result.data, addCollection]); + + if (result.isFetching) { + return ; + } else if (result.data) { + if ( + result.data.type === "Collection" && + filteredCollections && + !filteredCollections.includes(result.data) + ) { + return null; + } + return ; + } +} diff --git a/src/components/collection-filter.tsx b/src/components/collection-filter.tsx new file mode 100644 index 0000000..e6d9c86 --- /dev/null +++ b/src/components/collection-filter.tsx @@ -0,0 +1,77 @@ +import { useEffect, useRef, useState } from "react"; +import { LuFilter } from "react-icons/lu"; +import { + Checkbox, + CloseButton, + Input, + InputGroup, + Stack, +} from "@chakra-ui/react"; +import type { StacCollection } from "stac-ts"; +import { useStore } from "../store"; +import { isCollectionInBbox } from "../utils/stac"; + +export default function CollectionFilter() { + const collections = useStore((store) => store.collections); + const setFilteredCollections = useStore( + (store) => store.setFilteredCollections + ); + const bbox = useStore((store) => store.bbox); + const inputRef = useRef(null); + const [searchValue, setSearchValue] = useState(""); + const [filterViewport, setFilterViewport] = useState(true); + + useEffect(() => { + setFilteredCollections( + collections?.filter( + (collection) => + matchesFilter(collection, searchValue) && + (!filterViewport || !bbox || isCollectionInBbox(collection, bbox)) + ) || null + ); + }, [collections, setFilteredCollections, searchValue, bbox, filterViewport]); + + return ( + + } + endElement={ + searchValue && ( + { + setSearchValue(""); + inputRef.current?.focus(); + }} + /> + ) + } + > + setSearchValue(e.currentTarget.value)} + /> + + setFilterViewport(!!e.checked)} + checked={filterViewport} + size={"sm"} + > + + + Filter by viewport + + + ); +} + +function matchesFilter(collection: StacCollection, filter: string) { + const lowerCaseFilter = filter.toLowerCase(); + return ( + collection.id.toLowerCase().includes(lowerCaseFilter) || + collection.title?.toLowerCase().includes(lowerCaseFilter) + ); +} diff --git a/src/components/collections.tsx b/src/components/collections.tsx new file mode 100644 index 0000000..3e2f659 --- /dev/null +++ b/src/components/collections.tsx @@ -0,0 +1,211 @@ +import { type Dispatch, type SetStateAction, useEffect, useState } from "react"; +import { LuFolderPlus, LuForward, LuPause, LuPlay } from "react-icons/lu"; +import { + ActionBar, + Button, + ButtonGroup, + Center, + Link, + List, + Portal, + SkeletonText, + Stack, +} from "@chakra-ui/react"; +import { + type InfiniteData, + useInfiniteQuery, + type UseInfiniteQueryResult, +} from "@tanstack/react-query"; +import CollectionFilter from "./collection-filter"; +import { type ListOrCard, Section } from "./section"; +import { toaster } from "./ui/toaster"; +import ValueCard from "./value-card"; +import ValueListItem from "./value-list-item"; +import { useStore } from "../store"; +import type { StacCollections } from "../types/stac"; +import { getLinkHref } from "../utils/stac"; + +export default function Collections({ href }: { href: string }) { + const setCollections = useStore((state) => state.setCollections); + const collections = useStore((store) => store.collections); + const filteredCollections = useStore((store) => store.filteredCollections); + const [fetchAllCollections, setFetchAllCollections] = useState(false); + + const result = useInfiniteQuery({ + queryKey: ["stac-collections", href], + queryFn: async ({ pageParam }) => { + if (pageParam) { + return await fetch(pageParam).then((response) => { + if (response.ok) return response.json(); + else + throw new Error( + `Error while fetching collections from ${pageParam}` + ); + }); + } else { + return null; + } + }, + initialPageParam: href, + getNextPageParam: (lastPage: StacCollections | null) => + lastPage ? getLinkHref(lastPage, "next") : undefined, + }); + + useEffect(() => { + setCollections( + result.data?.pages.flatMap( + (collections) => collections?.collections || [] + ) || null + ); + }, [result.data, setCollections]); + + useEffect(() => { + if (fetchAllCollections && !result.isFetching && result.hasNextPage) { + result.fetchNextPage(); + } + }, [fetchAllCollections, result]); + + useEffect(() => { + if (result.error) { + toaster.create({ + type: "error", + title: href, + description: result.error.message, + }); + } + }, [result.error, href]); + + return ( + <> +
} + title="Collections" + count={collections?.length} + filteredCount={filteredCollections?.length} + > + {(listOrCard) => ( + <> + + + + )} +
+ + + + ); +} + +function CollectionValues({ + listOrCard, + hasNextPage, + fetchNextPage, + isFetching, +}: { listOrCard: ListOrCard } & UseInfiniteQueryResult) { + const collections = useStore((store) => store.collections); + const filteredCollections = useStore((store) => store.filteredCollections); + const values = (filteredCollections || collections)?.map((collection) => + listOrCard === "list" ? ( + + ) : ( + + ) + ); + if (listOrCard === "list") { + return ( + + {values} + {isFetching && ( + + + + )} + {hasNextPage && !isFetching && ( +
+ + fetchNextPage()}>Load more... + +
+ )} +
+ ); + } else { + return ( + + {values} + {isFetching && } + {hasNextPage && ( +
+ +
+ )} +
+ ); + } +} + +function CollectionActionBar({ + fetchAllCollections, + setFetchAllCollections, + data, + hasNextPage, + isFetching, + fetchNextPage, +}: { + fetchAllCollections: boolean; + setFetchAllCollections: Dispatch>; +} & UseInfiniteQueryResult>) { + const collections = useStore((store) => store.collections); + const numberMatched = data?.pages.at(0)?.numberMatched; + + return ( + + + + + {collections && ( + + {numberMatched && numberMatched > collections.length + ? `${collections.length}/${numberMatched}` + : collections.length}{" "} + collection{collections.length != 1 && "s"} fetched + + )} + {hasNextPage && ( + <> + + + + + + + )} + + + + + ); +} diff --git a/src/components/description.tsx b/src/components/description.tsx new file mode 100644 index 0000000..8ed6b78 --- /dev/null +++ b/src/components/description.tsx @@ -0,0 +1,44 @@ +import { useEffect, useRef, useState } from "react"; +import Markdown from "react-markdown"; +import { Button, Center, Stack } from "@chakra-ui/react"; +import { Prose } from "./ui/prose"; + +export default function Description({ description }: { description: string }) { + const [lineClamp, setLineClamp] = useState(true); + const [isClamped, setIsClamped] = useState(false); + const descriptionRef = useRef(null); + + useEffect(() => { + const checkClamp = () => { + if (descriptionRef.current) { + setIsClamped( + descriptionRef.current.scrollHeight > + descriptionRef.current.clientHeight + ); + } + }; + + checkClamp(); + window.addEventListener("resize", checkClamp); + return () => window.removeEventListener("resize", checkClamp); + }, [description]); + + return ( + + + {description} + + {isClamped && ( +
+ +
+ )} +
+ ); +} diff --git a/src/components/error.tsx b/src/components/error.tsx deleted file mode 100644 index 4405576..0000000 --- a/src/components/error.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { AbsoluteCenter, Alert, Box, Button, Stack } from "@chakra-ui/react"; - -export function ErrorComponent({ - error, - resetErrorBoundary, -}: { - error: Error; - resetErrorBoundary: () => void; -}) { - return ( - - - - - - Unhandled application error - - - {error.message} - - - - - - - - ); -} diff --git a/src/components/examples.tsx b/src/components/examples.tsx index 56f5220..6e2df6a 100644 --- a/src/components/examples.tsx +++ b/src/components/examples.tsx @@ -1,14 +1,10 @@ import { type ReactNode } from "react"; import { Badge, Menu, Portal, Span } from "@chakra-ui/react"; import { EXAMPLES } from "../constants"; +import { useStore } from "../store"; -export function Examples({ - setHref, - children, -}: { - setHref: (href: string | undefined) => void; - children: ReactNode; -}) { +export function Examples({ children }: { children: ReactNode }) { + const setHref = useStore((store) => store.setHref); return ( setHref(details.value)}> {children} diff --git a/src/components/extent.tsx b/src/components/extent.tsx deleted file mode 100644 index 5fea497..0000000 --- a/src/components/extent.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Box } from "@chakra-ui/react"; -import type { - SpatialExtent as StacSpatialExtent, - TemporalExtent as StacTemporalExtent, -} from "stac-ts"; - -export function SpatialExtent({ bbox }: { bbox: StacSpatialExtent }) { - return [{bbox.map((n) => Number(n.toFixed(4))).join(", ")}]; -} - -export function TemporalExtent({ interval }: { interval: StacTemporalExtent }) { - return ( - - —{" "} - - - ); -} - -function DateString({ datetime }: { datetime: string | null }) { - if (datetime) { - return new Date(datetime).toLocaleDateString(); - } else { - return "unbounded"; - } -} diff --git a/src/components/href-input.tsx b/src/components/href-input.tsx new file mode 100644 index 0000000..8592930 --- /dev/null +++ b/src/components/href-input.tsx @@ -0,0 +1,26 @@ +import { Box, Input } from "@chakra-ui/react"; +import { useStore } from "../store"; + +export default function HrefInput() { + const setHref = useStore((state) => state.setHref); + const input = useStore((state) => state.input); + const setInput = useStore((state) => state.setInput); + + return ( + { + e.preventDefault(); + setHref(input || null); + }} + flex="1" + > + setInput(e.target.value)} + > + + ); +} diff --git a/src/components/introduction.tsx b/src/components/introduction.tsx index d27c8fa..297603d 100644 --- a/src/components/introduction.tsx +++ b/src/components/introduction.tsx @@ -1,18 +1,6 @@ -import { - FileUpload, - Link, - Stack, - type UseFileUploadReturn, -} from "@chakra-ui/react"; -import { Examples } from "./examples"; +import { Link, Stack } from "@chakra-ui/react"; -export default function Introduction({ - fileUpload, - setHref, -}: { - fileUpload: UseFileUploadReturn; - setHref: (href: string | undefined) => void; -}) { +export default function Introduction() { return (

@@ -23,23 +11,6 @@ export default function Introduction({ .

-

- To get started, use the text input,{" "} - - - upload a file - - - , or{" "} - - load an example - - . -

Questions, issues, or feature requests? Get in touch on{" "} diff --git a/src/layers/map.tsx b/src/components/map.tsx similarity index 53% rename from src/layers/map.tsx rename to src/components/map.tsx index 2c48db1..abafdba 100644 --- a/src/layers/map.tsx +++ b/src/components/map.tsx @@ -1,4 +1,5 @@ -import { type RefObject, useEffect, useMemo, useRef, useState } from "react"; +import { type RefObject, useEffect, useRef } from "react"; +import { useMemo, useState } from "react"; import { Map as MaplibreMap, type MapRef, @@ -7,196 +8,182 @@ import { import { type DeckProps, Layer } from "@deck.gl/core"; import { GeoJsonLayer } from "@deck.gl/layers"; import { MapboxOverlay } from "@deck.gl/mapbox"; -import { - GeoArrowPolygonLayer, - GeoArrowScatterplotLayer, -} from "@geoarrow/deck.gl-layers"; import bbox from "@turf/bbox"; import bboxPolygon from "@turf/bbox-polygon"; +import { featureCollection } from "@turf/helpers"; import "maplibre-gl/dist/maplibre-gl.css"; -import type { SpatialExtent, StacCollection, StacItem } from "stac-ts"; +import type { StacCollection } from "stac-ts"; import { COGLayer } from "@developmentseed/deck.gl-geotiff"; import type { BBox, Feature, FeatureCollection } from "geojson"; import { useColorModeValue } from "../components/ui/color-mode"; -import type { GeoparquetTable } from "../hooks/stac-value"; +import { useStore } from "../store"; import type { BBox2D, Color } from "../types/map"; import type { StacValue } from "../types/stac"; -import { ValidGeometryType } from "../utils/stac-geoparquet"; +import { sanitizeBbox } from "../utils/map"; +import { + getCollectionExtents, + getSelfHref, + isGlobalCollection, +} from "../utils/stac"; -export default function Map({ - value, - collections, - filteredCollections, - items, - fillColor, - lineColor, - setBbox, - picked, - setPicked, - geoparquetTable, - setStacGeoparquetItemId, - cogHref, -}: { - value: StacValue | undefined; - collections: StacCollection[] | undefined; - filteredCollections: StacCollection[] | undefined; - items: StacItem[] | undefined; - fillColor: Color; - lineColor: Color; - setBbox: (bbox: BBox2D | undefined) => void; - picked: StacValue | undefined; - setPicked: (picked: StacValue | undefined) => void; - geoparquetTable: GeoparquetTable | undefined; - setStacGeoparquetItemId: (id: string | undefined) => void; - cogHref: string | undefined; -}) { +export default function Map() { const mapRef = useRef(null); - const [mapLoaded, setMapLoaded] = useState(false); const mapStyle = useColorModeValue( "positron-gl-style", "dark-matter-gl-style" ); - const table = geoparquetTable?.table; - const geometryType = geoparquetTable?.geometryType; + const [isMapLoaded, setIsMapLoaded] = useState(false); + const setHref = useStore((store) => store.setHref); + const value = useStore((store) => store.value); + const collections = useStore((store) => store.collections); + const filteredCollections = useStore((store) => store.filteredCollections); + const hoveredCollection = useStore((store) => store.hoveredCollection); + const setHoveredCollection = useStore((store) => store.setHoveredCollection); + const hoveredItem = useStore((store) => store.hoveredItem); + const setHoveredItem = useStore((store) => store.setHoveredItem); + const pickedItem = useStore((store) => store.pickedItem); + const setPickedItem = useStore((store) => store.setPickedItem); + const searchItems = useStore((store) => store.searchItems); + const geotiffHref = useStore((store) => store.geotiffHref); + const setBbox = useStore((store) => store.setBbox); + const fillColor = useStore((store) => store.fillColor); + const lineColor = useStore((store) => store.lineColor); + const lineWidth = useStore((store) => store.lineWidth); + + const inverseFillColor = [ + 256 - fillColor[0], + 256 - fillColor[1], + 256 - fillColor[2], + fillColor[3], + ]; + const inverseLineColor = [ + 256 - fillColor[0], + 256 - fillColor[1], + 256 - fillColor[2], + fillColor[3], + ]; + const valueGeoJson = useMemo(() => { if (value) { - return valueToGeoJson(value); - } else { - return undefined; + return toGeoJson(value); } }, [value]); - const pickedGeoJson = useMemo(() => { - if (picked) { - return valueToGeoJson(picked); - } else { - return undefined; - } - }, [picked]); const collectionsGeoJson = useMemo(() => { return (filteredCollections || collections) ?.map( (collection) => collection.extent?.spatial?.bbox && - bboxPolygon(getCollectionExtents(collection) as BBox) + bboxPolygon(getCollectionExtents(collection) as BBox, { + id: collection.id, + }) ) .filter((feature) => !!feature); }, [collections, filteredCollections]); - const inverseFillColor: Color = [ - 256 - fillColor[0], - 256 - fillColor[1], - 256 - fillColor[2], - fillColor[3], - ]; - const inverseLineColor: Color = [ - 256 - fillColor[0], - 256 - fillColor[1], - 256 - fillColor[2], - fillColor[3], - ]; - - let layers: Layer[] = []; + useEffect(() => { + if (value && mapRef.current && isMapLoaded) { + const padding = { + top: window.innerHeight / 10, + bottom: window.innerHeight / 20, + right: window.innerWidth / 20, + left: window.innerWidth / 20 + window.innerWidth / 3, + }; + const bbox = getBbox(value, collections); + if (bbox) mapRef.current.fitBounds(bbox, { linear: true, padding }); + } + }, [value, isMapLoaded, collections]); - if (cogHref) - layers.push( - new COGLayer({ - id: "cog-layer", - geotiff: cogHref, - }) - ); - layers = [ - ...layers, + const layers: Layer[] = [ new GeoJsonLayer({ - id: "picked", - data: pickedGeoJson, + id: "picked-item", + data: pickedItem ? ([pickedItem] as Feature[]) : [], filled: true, - getFillColor: inverseFillColor, - getLineColor: inverseLineColor, - getLineWidth: 2, + getFillColor: inverseFillColor as Color, + getLineColor: inverseLineColor as Color, + getLineWidth: lineWidth, lineWidthUnits: "pixels", }), new GeoJsonLayer({ - id: "items", - data: items as Feature[] | undefined, + id: "hovered-item", + data: hoveredItem ? ([hoveredItem] as Feature[]) : [], filled: true, getFillColor: fillColor, getLineColor: lineColor, - getLineWidth: 2, + getLineWidth: lineWidth, + lineWidthUnits: "pixels", + }), + new GeoJsonLayer({ + id: "hovered-collection", + data: hoveredCollection + ? [bboxPolygon(getCollectionExtents(hoveredCollection) as BBox)] + : [], + filled: true, + getFillColor: fillColor, + getLineColor: lineColor, + getLineWidth: lineWidth, + lineWidthUnits: "pixels", + }), + new GeoJsonLayer({ + id: "search-items", + data: searchItems ? featureCollection(searchItems as Feature[]) : [], + filled: true, + getFillColor: geotiffHref ? [0, 0, 0, 0] : fillColor, + getLineColor: lineColor, + getLineWidth: lineWidth, lineWidthUnits: "pixels", pickable: true, - onClick: (info) => { - setPicked(info.object); + onHover: (e) => { + setHoveredItem(e.object); + }, + onClick: (e) => { + setPickedItem(e.object); }, }), new GeoJsonLayer({ id: "collections", data: collectionsGeoJson, - filled: false, + filled: true, + getFillColor: [0, 0, 0, 0], getLineColor: lineColor, - getLineWidth: 2, + getLineWidth: lineWidth, lineWidthUnits: "pixels", + pickable: true, + onHover: (e) => { + setHoveredCollection( + collections?.find( + (collection) => + collection.id == e.object?.id && !isGlobalCollection(collection) + ) || null + ); + }, + onClick: (e) => { + const collection = collections?.find( + (collection) => + collection.id == e.object?.id && !isGlobalCollection(collection) + ); + const href = collection && getSelfHref(collection); + if (href) setHref(href); + }, }), new GeoJsonLayer({ id: "value", data: valueGeoJson, - filled: !items && !cogHref, - getFillColor: collections ? inverseFillColor : fillColor, - getLineColor: collections ? inverseLineColor : lineColor, - getLineWidth: 2, + filled: !(geotiffHref || searchItems || collectionsGeoJson), + getFillColor: fillColor, + getLineColor: lineColor, + getLineWidth: lineWidth, lineWidthUnits: "pixels", - pickable: value?.type !== "Collection" && value?.type !== "Feature", - onClick: (info) => { - setPicked(info.object); - }, }), ]; - if (table) { - if (geometryType === ValidGeometryType.Polygon) { - layers.push( - new GeoArrowPolygonLayer({ - id: "table-polygon", - data: table, - filled: true, - getFillColor: fillColor, - getLineColor: lineColor, - getLineWidth: 2, - lineWidthUnits: "pixels", - pickable: true, - onClick: (info) => { - setStacGeoparquetItemId(table.getChild("id")?.get(info.index)); - }, - }) - ); - } else if (geometryType === ValidGeometryType.Point) { - layers.push( - new GeoArrowScatterplotLayer({ - id: "table-point", - data: table, - getColor: lineColor, - getRadius: 2, - getPosition: table.getChild("geometry")!, - radiusUnits: "pixels", - pickable: true, - onClick: (info) => { - setStacGeoparquetItemId(table.getChild("id")?.get(info.index)); - }, - }) - ); - } - } - useEffect(() => { - if (value && mapRef.current && mapLoaded) { - const padding = { - top: window.innerHeight / 10, - bottom: window.innerHeight / 20, - right: window.innerWidth / 20, - left: window.innerWidth / 20 + window.innerWidth / 3, - }; - const bbox = getBbox(value, collections); - if (bbox) mapRef.current.fitBounds(bbox, { linear: true, padding }); - } - }, [value, collections, mapLoaded]); + if (geotiffHref) { + layers.push( + new COGLayer({ + id: "cog-" + geotiffHref, + geotiff: geotiffHref, + }) + ); + } return ( setMapLoaded(true)} + onLoad={() => setIsMapLoaded(true)} onMoveEnd={() => { if (mapRef.current && !mapRef.current.isMoving()) setBbox(sanitizeBbox(mapRef.current?.getBounds().toArray().flat())); @@ -251,7 +238,7 @@ function getCursor( return cursor; } -function valueToGeoJson(value: StacValue) { +function toGeoJson(value: StacValue) { switch (value.type) { case "Catalog": return undefined; @@ -267,17 +254,9 @@ function valueToGeoJson(value: StacValue) { } } -function getCollectionExtents(collection: StacCollection): SpatialExtent { - const spatialExtent = collection.extent?.spatial; - // check if bbox is a list of lists, otherwise its a single list of nums - return Array.isArray(spatialExtent?.bbox?.[0]) - ? spatialExtent?.bbox[0] - : (spatialExtent?.bbox as unknown as SpatialExtent); -} - function getBbox( value: StacValue, - collections: StacCollection[] | undefined + collections: StacCollection[] | null ): BBox2D | undefined { let valueBbox; switch (value.type) { @@ -311,21 +290,3 @@ function getBbox( } return valueBbox ? sanitizeBbox(valueBbox) : undefined; } - -function sanitizeBbox(bbox: BBox | SpatialExtent): BBox2D { - if (bbox.length === 6) { - return [ - Math.max(bbox[0], -180), - Math.max(bbox[1], -90), - Math.min(bbox[3], 180), - Math.min(bbox[4], 90), - ]; - } else { - return [ - Math.max(bbox[0], -180), - Math.max(bbox[1], -90), - Math.min(bbox[2], 180), - Math.min(bbox[3], 90), - ]; - } -} diff --git a/src/components/overlay.tsx b/src/components/overlay.tsx new file mode 100644 index 0000000..dd35dc0 --- /dev/null +++ b/src/components/overlay.tsx @@ -0,0 +1,26 @@ +import { Button, GridItem, HStack, SimpleGrid } from "@chakra-ui/react"; +import { Examples } from "./examples"; +import HrefInput from "./href-input"; +import Panel from "./panel"; +import { ColorModeButton } from "./ui/color-mode"; + +export default function Overlay() { + return ( + + + + + + + + + + + + + + + ); +} diff --git a/src/components/panel.tsx b/src/components/panel.tsx index 83441a6..06a517d 100644 --- a/src/components/panel.tsx +++ b/src/components/panel.tsx @@ -1,58 +1,120 @@ +import { type ReactNode, useEffect } from "react"; +import { LuArrowRight } from "react-icons/lu"; import { - Alert, + Box, + CloseButton, + HStack, + IconButton, SkeletonText, - type UseFileUploadReturn, + Spinner, } from "@chakra-ui/react"; +import type { StacItem } from "stac-ts"; import Introduction from "./introduction"; -import { type SharedValueProps, Value } from "./value"; +import { StacIcon } from "./stac"; +import Value from "./value"; +import { useStacJson } from "../hooks/stac"; +import { useStore } from "../store"; import type { StacValue } from "../types/stac"; +import { getSelfHref, getStacValueId } from "../utils/stac"; -export interface PanelProps extends SharedValueProps { - href: string | undefined; - value: StacValue | undefined; - error: Error | undefined; - fileUpload: UseFileUploadReturn; -} +export default function Panel() { + const href = useStore((store) => store.href); + const value = useStore((store) => store.value); + const pickedItem = useStore((store) => store.pickedItem); -export default function Panel({ - href, - setHref, - value, - error, - fileUpload, - ...props -}: { - totalNumOfCollections: number | undefined; - datetimes: { - start: Date; - end: Date; - } | null; -} & PanelProps) { - if (error) + if (pickedItem) { + return ; + } else if (value) { + return ; + } else if (href) { + return ; + } else { return ( - - - - Error while fetching STAC value - {error.toString()} - - + + + ); - else if (href) { - if (value) { - return ( - - ); - } else { - return ; - } - } else { - return ; } } + +function PickedItemPanel({ pickedItem }: { pickedItem: StacItem }) { + const setHref = useStore((store) => store.setHref); + const setPickedItem = useStore((store) => store.setPickedItem); + const href = getSelfHref(pickedItem); + + const header = ( + + {getStacValueId(pickedItem)}{" "} + + {href && ( + + setHref(href)} /> + + )} + setPickedItem(null)} /> + + ); + return ( + + + + ); +} + +function ValuePanel({ value }: { value: StacValue }) { + const header = ( + + {getStacValueId(value)}{" "} + + ); + return ( + + + + ); +} + +function HrefPanel({ href }: { href: string }) { + const setValue = useStore((store) => store.setValue); + const result = useStacJson({ href }); + const header = ( + + + Fetching {href}... + + ); + + useEffect(() => { + if (result.data) setValue(result.data); + }, [result.data, setValue]); + + return ( + + + + ); +} + +function BasePanel({ + header, + children, +}: { + header: ReactNode; + children: ReactNode; +}) { + return ( + + + {header} + + + {children} + + + ); +} diff --git a/src/components/properties.tsx b/src/components/properties.tsx deleted file mode 100644 index a06889f..0000000 --- a/src/components/properties.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import type { ReactNode } from "react"; -import { LuFileJson } from "react-icons/lu"; -import { Code, DataList, Dialog, IconButton, Portal } from "@chakra-ui/react"; - -export interface PropertiesProps { - properties: { [k: string]: unknown }; -} - -export function Properties({ properties }: PropertiesProps) { - return ( - - {Object.keys(properties).map((key) => ( - - ))} - - ); -} - -function Property({ - propertyKey, - propertyValue, -}: { - propertyKey: string; - propertyValue: unknown; -}) { - return ( - - {propertyKey} - {getValue(propertyValue)} - - ); -} - -function getValue(value: unknown): ReactNode { - switch (typeof value) { - case "string": - case "number": - case "bigint": - case "boolean": - case "undefined": - return value; - case "object": - return ( - - - - - - - - - - - -

-                    {JSON.stringify(value, null, 2)}
-                  
- - - - - - ); - case "symbol": - case "function": - return null; - } -} diff --git a/src/components/root.tsx b/src/components/root.tsx new file mode 100644 index 0000000..ecbb4d3 --- /dev/null +++ b/src/components/root.tsx @@ -0,0 +1,16 @@ +import { SkeletonText } from "@chakra-ui/react"; +import Search from "./search"; +import { useStacJson } from "../hooks/stac"; +import { useStore } from "../store"; +import { getLinkHref } from "../utils/stac"; + +export default function Root({ href }: { href: string }) { + const value = useStore((store) => store.value); + const result = useStacJson({ href }); + const searchHref = result.data ? getLinkHref(result.data, "search") : null; + if (searchHref && value?.type === "Collection") { + return ; + } else if (result.isFetching) { + return ; + } +} diff --git a/src/components/search.tsx b/src/components/search.tsx new file mode 100644 index 0000000..683df99 --- /dev/null +++ b/src/components/search.tsx @@ -0,0 +1,221 @@ +import { useEffect, useMemo, useState } from "react"; +import { + LuForward, + LuPause, + LuPlay, + LuSearch, + LuSettings, + LuX, +} from "react-icons/lu"; +import { useMap } from "react-map-gl/maplibre"; +import { + ActionBar, + Button, + ButtonGroup, + List, + Portal, + SkeletonText, + Stack, +} from "@chakra-ui/react"; +import { useInfiniteQuery } from "@tanstack/react-query"; +import type { StacCollection, StacItem } from "stac-ts"; +import type { BBox } from "geojson"; +import { type ListOrCard, Section } from "./section"; +import ValueCard from "./value-card"; +import ValueListItem from "./value-list-item"; +import { useStore } from "../store.ts"; +import type { StacItemCollection, StacSearch } from "../types/stac"; +import { sanitizeBbox } from "../utils/map.ts"; +import { fetchStac, getLinkHref } from "../utils/stac.ts"; + +interface Props { + href: string; + collection: StacCollection; +} + +export default function Search({ href, collection }: Props) { + const searchItems = useStore((store) => store.searchItems); + const setSearchItems = useStore((store) => store.setSearchItems); + const [search, setSearch] = useState(null); + const { map } = useMap(); + + return ( +
} + title="Item search" + count={searchItems?.length} + defaultListOrCard="list" + > + {(listOrCard) => ( + <> + + + + {search ? ( + + ) : ( + + )} + + + {search && ( + + )} + + )} +
+ ); +} + +function SearchResults({ + href, + search, + listOrCard, +}: { + href: string; + search: StacSearch; + listOrCard: ListOrCard; +}) { + const searchItems = useStore((store) => store.searchItems); + const setSearchItems = useStore((store) => store.setSearchItems); + const [fetchAllItems, setFetchAllItems] = useState(false); + + const url = useMemo(() => { + return new URL(href); + }, [href]); + + if (search.collections) + url.searchParams.set("collections", search.collections.join(",")); + if (search.bbox) url.searchParams.set("bbox", search.bbox.join(",")); + + const result = useInfiniteQuery({ + queryKey: ["stac-search", href, search], + queryFn: async ({ pageParam }) => { + if (pageParam) { + return (await fetchStac({ + href: pageParam, + method: "GET", + })) as StacItemCollection; + } else { + return null; + } + }, + initialPageParam: url.toString(), + getNextPageParam: (lastPage) => + lastPage ? getLinkHref(lastPage, "next") : null, + }); + + const numberMatched = result.data?.pages.at(0)?.numberMatched; + + useEffect(() => { + if (result.data) + setSearchItems(result.data.pages.flatMap((page) => page?.features || [])); + }, [result.data, setSearchItems]); + + useEffect(() => { + if (fetchAllItems && !result.isFetching && result.hasNextPage) + result.fetchNextPage(); + }, [fetchAllItems, result]); + + return ( + <> + + {searchItems && ( + + )} + + {result.isFetching && } + + + + + + + {searchItems?.length} + {numberMatched && "/" + numberMatched} item + {searchItems?.length != 1 && "s"} fetched + + + {result.hasNextPage && ( + <> + + + + + + + )} + + + + + + ); +} + +function SearchItems({ + items, + listOrCard, +}: { + items: StacItem[]; + listOrCard: ListOrCard; +}) { + if (listOrCard === "list") { + return ( + + {items.map((item) => ( + + ))} + + ); + } else { + return ( + + {items.map((item) => ( + + ))} + + ); + } +} diff --git a/src/components/section.tsx b/src/components/section.tsx index 58e505c..5f60e17 100644 --- a/src/components/section.tsx +++ b/src/components/section.tsx @@ -1,49 +1,104 @@ -import { type ReactNode } from "react"; -import { ErrorBoundary } from "react-error-boundary"; -import { type IconType } from "react-icons/lib"; -import { Accordion, Alert, HStack, Icon } from "@chakra-ui/react"; +import { type ReactNode, useState } from "react"; +import { LuChevronDown, LuChevronUp, LuList, LuSquare } from "react-icons/lu"; +import { + Box, + Collapsible, + Heading, + HStack, + IconButton, + SegmentGroup, + Stack, +} from "@chakra-ui/react"; -export default function Section({ +interface SectionProps { + icon: ReactNode; + title: string; + count?: number; + filteredCount?: number; + defaultListOrCard?: ListOrCard; + children: (listOrCard: ListOrCard) => ReactNode; +} + +export function Section({ + icon, title, - TitleIcon, - value, + count, + filteredCount, + defaultListOrCard = "card", children, -}: { - title: ReactNode; - TitleIcon: IconType; - value: string; - children: ReactNode; -}) { +}: SectionProps) { + const [listOrCard, setListOrCard] = useState(defaultListOrCard); + const [open, setOpen] = useState(true); + return ( - - - - - - {" "} - {title} - - - - - - - {children} - - - - + setOpen(e.open)}> + + + + {children(listOrCard)} + + + ); } -function FallbackComponent({ error }: { error: Error }) { +export type ListOrCard = "list" | "card"; + +interface SectionHeaderProps { + icon: ReactNode; + title: string; + count?: number; + filteredCount?: number; + listOrCard: ListOrCard; + setListOrCard: (value: ListOrCard) => void; + open: boolean; +} + +function SectionHeader({ + icon, + title, + count, + filteredCount, + listOrCard, + setListOrCard, + open, +}: SectionHeaderProps) { return ( - - - - An error occurred during rendering - {error.message} - - + + + + {icon} {title}{" "} + {count !== undefined && + `(${filteredCount !== undefined ? filteredCount + "/" : ""}${count})`} + + + + setListOrCard((e.value as ListOrCard) || "card")} + size={"xs"} + > + + }, + { value: "card", label: }, + ]} + /> + + + + {open ? : } + + + ); } diff --git a/src/components/sections/assets.tsx b/src/components/sections/assets.tsx deleted file mode 100644 index b403b52..0000000 --- a/src/components/sections/assets.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { LuFiles } from "react-icons/lu"; -import { DataList } from "@chakra-ui/react"; -import type { StacAssets } from "../../types/stac"; -import AssetCard from "../cards/asset"; -import Section from "../section"; - -interface AssetsProps { - assets: StacAssets; - cogHref: string | undefined; - setcogHref: (href: string | undefined) => void; -} - -export default function AssetsSection({ ...props }: AssetsProps) { - return ( -
- -
- ); -} - -function Assets({ assets, cogHref, setcogHref }: AssetsProps) { - return ( - - {Object.keys(assets).map((key) => ( - - {key} - - - - - ))} - - ); -} diff --git a/src/components/sections/catalogs.tsx b/src/components/sections/catalogs.tsx deleted file mode 100644 index 17e987b..0000000 --- a/src/components/sections/catalogs.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { LuFolder } from "react-icons/lu"; -import { Stack } from "@chakra-ui/react"; -import type { StacCatalog } from "stac-ts"; -import CatalogCard from "../cards/catalog"; -import Section from "../section"; - -interface CatalogsProps { - catalogs: StacCatalog[]; - setHref: (href: string | undefined) => void; -} - -export default function CatalogsSection({ catalogs, setHref }: CatalogsProps) { - const title = `Catalogs (${catalogs.length})`; - return ( -
- -
- ); -} - -function Catalogs({ catalogs, setHref }: CatalogsProps) { - return ( - - {catalogs.map((catalog) => ( - - ))} - - ); -} diff --git a/src/components/sections/collection-search.tsx b/src/components/sections/collection-search.tsx deleted file mode 100644 index 1eac21f..0000000 --- a/src/components/sections/collection-search.tsx +++ /dev/null @@ -1,306 +0,0 @@ -import { useMemo, useRef, useState } from "react"; -import { LuFolderSearch, LuSearch } from "react-icons/lu"; -import { - CloseButton, - Combobox, - createListCollection, - Field, - HStack, - Input, - InputGroup, - Portal, - SegmentGroup, - SkeletonText, - Stack, -} from "@chakra-ui/react"; -import { useQuery } from "@tanstack/react-query"; -import type { StacCollection } from "stac-ts"; -import type { NaturalLanguageCollectionSearchResult } from "../../types/stac"; -import CollectionCard from "../cards/collection"; -import Section from "../section"; - -interface CollectionSearchProps { - collections: StacCollection[]; - catalogHref: string | undefined; - setHref: (href: string | undefined) => void; -} - -export default function CollectionSearchSection({ - ...props -}: CollectionSearchProps) { - return ( -
- -
- ); -} - -function CollectionSearch({ - collections, - catalogHref, - setHref, -}: CollectionSearchProps) { - const [value, setValue] = useState<"Text" | "Natural language">("Text"); - return ( - - - - setValue(e.value as "Text" | "Natural language") - } - > - - - - - {value === "Text" && ( - - )} - {value === "Natural language" && catalogHref && ( - - )} - - ); -} - -function CollectionCombobox({ - collections, - setHref, -}: { - collections: StacCollection[]; - setHref: (href: string | undefined) => void; -}) { - const [searchValue, setSearchValue] = useState(""); - - const filteredCollections = useMemo(() => { - return collections.filter( - (collection) => - collection.title?.toLowerCase().includes(searchValue.toLowerCase()) || - collection.id.toLowerCase().includes(searchValue.toLowerCase()) || - collection.description.toLowerCase().includes(searchValue.toLowerCase()) - ); - }, [searchValue, collections]); - - const collection = useMemo( - () => - createListCollection({ - items: filteredCollections, - itemToString: (collection) => collection.title || collection.id, - itemToValue: (collection) => collection.id, - }), - - [filteredCollections] - ); - - return ( - setSearchValue(details.inputValue)} - onSelect={(details) => { - const collection = collections.find( - (collection) => collection.id == details.itemValue - ); - if (collection) { - const selfHref = collection.links.find( - (link) => link.rel == "self" - )?.href; - if (selfHref) { - setHref(selfHref); - } - } - }} - > - - - - - - - - - - - - - {filteredCollections.map((collection) => ( - - {collection.title || collection.id} - - - - ))} - - No collections found - - - - - - ); -} - -function NaturalLanguageCollectionSearch({ - href, - setHref, - collections, -}: { - href: string; - setHref: (href: string | undefined) => void; - collections: StacCollection[]; -}) { - const [query, setQuery] = useState(); - const [value, setValue] = useState(""); - const inputRef = useRef(null); - - const endElement = value ? ( - { - setValue(""); - setQuery(undefined); - inputRef.current?.focus(); - }} - me="-2" - /> - ) : undefined; - - return ( - -
{ - e.preventDefault(); - setQuery(value); - }} - > - - } - endElement={endElement} - > - setValue(e.target.value)} - > - - - Natural language collection search is experimental, and can be - rather slow. - - -
- {query && ( - - )} -
- ); -} - -function Results({ - query, - href, - setHref, - collections, -}: { - query: string; - href: string; - setHref: (href: string | undefined) => void; - collections: StacCollection[]; -}) { - const { data } = useQuery<{ - results: NaturalLanguageCollectionSearchResult[]; - }>({ - queryKey: [href, query], - queryFn: async () => { - const body = JSON.stringify({ - query, - catalog_url: href, - }); - const url = new URL( - "search", - import.meta.env.VITE_STAC_NATURAL_QUERY_API - ); - return await fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body, - }).then((response) => { - if (response.ok) { - return response.json(); - } else { - throw new Error( - `Error while doing a natural language search against ${href}: ${response.statusText}` - ); - } - }); - }, - }); - - const results = useMemo(() => { - return data?.results.map( - (result: NaturalLanguageCollectionSearchResult) => { - return { - result, - collection: collections.find( - (collection) => collection.id == result.collection_id - ), - }; - } - ); - }, [data, collections]); - - if (results) { - return ( - - {results.map((result) => { - if (result.collection) { - return ( - - ); - } else { - return null; - } - })} - - ); - } else { - return ; - } -} diff --git a/src/components/sections/collections.tsx b/src/components/sections/collections.tsx deleted file mode 100644 index 20224e1..0000000 --- a/src/components/sections/collections.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { LuFolderPlus } from "react-icons/lu"; -import { Stack } from "@chakra-ui/react"; -import type { StacCollection } from "stac-ts"; -import CollectionCard from "../cards/collection"; -import Section from "../section"; - -interface CollectionsProps { - collections: StacCollection[]; - setHref: (href: string | undefined) => void; -} - -export default function CollectionsSection({ - collections, - collectionsNumberMatched, - totalNumOfCollections, - setHref, -}: { - collectionsNumberMatched: number | undefined; - totalNumOfCollections: number | undefined; -} & CollectionsProps) { - const parenthetical = - collections.length !== collectionsNumberMatched - ? `${collections.length}/${collectionsNumberMatched || totalNumOfCollections}` - : collections.length; - const title = `Collections (${parenthetical})`; - return ( -
- -
- ); -} - -function Collections({ collections, setHref }: CollectionsProps) { - return ( - - {collections.map((collection) => ( - - ))} - - ); -} diff --git a/src/components/sections/filter.tsx b/src/components/sections/filter.tsx deleted file mode 100644 index 00e2aa8..0000000 --- a/src/components/sections/filter.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import { useEffect, useMemo, useState } from "react"; -import { LuFilter, LuFilterX } from "react-icons/lu"; -import { Checkbox, DataList, Slider, Stack, Text } from "@chakra-ui/react"; -import type { StacCollection, StacItem } from "stac-ts"; -import type { BBox2D } from "../../types/map"; -import type { DatetimeBounds, StacValue } from "../../types/stac"; -import { SpatialExtent } from "../extent"; -import Section from "../section"; - -interface FilterProps { - filter: boolean; - setFilter: (filter: boolean) => void; - bbox: BBox2D | undefined; - setDatetimeBounds: (bounds: DatetimeBounds | undefined) => void; - value: StacValue; - items: StacItem[] | undefined; - collections: StacCollection[] | undefined; - datetimes: { - start: Date; - end: Date; - } | null; -} - -export default function FilterSection({ filter, ...props }: FilterProps) { - return ( -
- -
- ); -} - -function Filter({ - filter, - setFilter, - bbox, - setDatetimeBounds, - datetimes, -}: FilterProps) { - const [filterStart, setFilterStart] = useState(); - const [filterEnd, setFilterEnd] = useState(); - - const sliderValue = useMemo(() => { - if (!datetimes) return undefined; - if (filterStart && filterEnd) { - return [filterStart.getTime(), filterEnd.getTime()]; - } - return [datetimes.start.getTime(), datetimes.end.getTime()]; - }, [datetimes, filterStart, filterEnd]); - - useEffect(() => { - if (filterStart && filterEnd) { - setDatetimeBounds({ start: filterStart, end: filterEnd }); - } - }, [filterStart, filterEnd, setDatetimeBounds]); - - return ( - - setFilter(!!e.checked)} - > - - Filter collections and items? - - - - - - Bounding box - - {(bbox && ) || "not set"} - - - {datetimes && ( - - Datetime - - - - {filterStart - ? filterStart.toLocaleDateString() - : datetimes.start.toLocaleDateString()}{" "} - —{" "} - {filterEnd - ? filterEnd.toLocaleDateString() - : datetimes.end.toLocaleDateString()} - - { - setFilterStart(new Date(e.value[0])); - setFilterEnd(new Date(e.value[1])); - }} - disabled={!filter} - > - - - - - - - - - - - )} - - - ); -} diff --git a/src/components/sections/item-search.tsx b/src/components/sections/item-search.tsx deleted file mode 100644 index 330d4e9..0000000 --- a/src/components/sections/item-search.tsx +++ /dev/null @@ -1,422 +0,0 @@ -import { useEffect, useMemo, useState } from "react"; -import { - LuDownload, - LuPause, - LuPlay, - LuSearch, - LuStepForward, - LuX, -} from "react-icons/lu"; -import { - Alert, - Button, - ButtonGroup, - createListCollection, - DownloadTrigger, - Field, - Group, - Heading, - HStack, - IconButton, - Input, - Portal, - Progress, - Select, - Span, - Stack, - Switch, - Text, -} from "@chakra-ui/react"; -import type { - StacCollection, - StacItem, - StacLink, - TemporalExtent, -} from "stac-ts"; -import * as stac_wasm from "stac-wasm"; -import useStacSearch from "../../hooks/stac-search"; -import type { BBox2D } from "../../types/map"; -import type { StacSearch } from "../../types/stac"; -import { SpatialExtent } from "../extent"; -import Section from "../section"; - -interface ItemSearchProps { - search: StacSearch | undefined; - setSearch: (search: StacSearch | undefined) => void; - links: StacLink[]; - bbox: BBox2D | undefined; - collection: StacCollection; - setItems: (items: StacItem[] | undefined) => void; -} - -export default function ItemSearchSection({ ...props }: ItemSearchProps) { - return ( -
- -
- ); -} - -function ItemSearch({ - search, - setSearch, - links, - bbox, - collection, - setItems, -}: { - search: StacSearch | undefined; - setSearch: (search: StacSearch | undefined) => void; - links: StacLink[]; - bbox: BBox2D | undefined; - collection: StacCollection; - setItems: (items: StacItem[] | undefined) => void; -}) { - // We trust that there's at least one link. - const [link, setLink] = useState(links[0]); - const [useViewportBounds, setUseViewportBounds] = useState(true); - const [datetime, setDatetime] = useState( - search?.datetime - ); - const methods = createListCollection({ - items: links.map((link) => { - return { - label: (link.method as string) || "GET", - value: (link.method as string) || "GET", - }; - }), - }); - - return ( - - - setUseViewportBounds(e.checked)} - size={"sm"} - > - - Use viewport bounds - - - {bbox && useViewportBounds && ( - - - - )} - - - - - - { - const link = links.find( - (link) => (link.method || "GET") == e.value - ); - if (link) setLink(link); - }} - maxW={100} - > - - - - - - - - - - - - - {methods.items.map((method) => ( - - {method.label} - - - ))} - - - - - - - - - {search && ( - setSearch(undefined)} - setItems={setItems} - /> - )} - - ); -} - -function Search({ - search, - link, - onClear, - setItems, -}: { - search: StacSearch; - link: StacLink; - onClear: () => void; - setItems: (items: StacItem[] | undefined) => void; -}) { - const result = useStacSearch(search, link); - const numberMatched = result.data?.pages[0]?.numberMatched; - const items = useMemo(() => { - return result.data?.pages.flatMap((page) => page.features); - }, [result.data]); - const [autoFetch, setAutoFetch] = useState(false); - - useEffect(() => { - if (autoFetch && !result.isFetching && result.hasNextPage) - result.fetchNextPage(); - }, [result, autoFetch]); - - useEffect(() => { - setItems(items); - }, [items, setItems]); - - const downloadJson = () => { - return JSON.stringify( - items ? { type: "FeatureCollection", features: items } : {} - ); - }; - - const downloadStacGeoparquet = () => { - return new Blob( - items ? [stac_wasm.stacJsonToParquet(items) as BlobPart] : [] - ); - }; - - return ( - - Search results - {(numberMatched && ( - - - - - - - - - )) || - (items && {items.length} item(s) fetched)} - {result.error && ( - - - - Error while searching - {result.error.toString()} - - - )} - - - - - - - {items && items.length > 0 && ( - <> - Download - - - - - - - - - - )} - - ); -} - -function Datetime({ - interval, - setDatetime, -}: { - interval: TemporalExtent | undefined; - setDatetime: (datetime: string | undefined) => void; -}) { - const [startDatetime, setStartDatetime] = useState( - interval?.[0] ? new Date(interval[0]) : undefined - ); - const [endDatetime, setEndDatetime] = useState( - interval?.[1] ? new Date(interval[1]) : undefined - ); - - useEffect(() => { - if (startDatetime || endDatetime) { - setDatetime( - `${startDatetime?.toISOString() || ".."}/${endDatetime?.toISOString() || ".."}` - ); - } else { - setDatetime(undefined); - } - }, [startDatetime, endDatetime, setDatetime]); - - return ( - - - - - - ); -} - -function DatetimeInput({ - label, - datetime, - setDatetime, -}: { - label: string; - datetime: Date | undefined; - setDatetime: (datetime: Date | undefined) => void; -}) { - const [error, setError] = useState(); - const dateValue = datetime?.toISOString().split("T")[0] || ""; - const timeValue = datetime?.toISOString().split("T")[1].slice(0, 8) || ""; - - const setDatetimeChecked = (datetime: Date) => { - try { - datetime.toISOString(); - // eslint-disable-next-line - } catch (e: any) { - setError(e.toString()); - return; - } - setDatetime(datetime); - setError(undefined); - }; - const setDate = (date: string) => { - setDatetimeChecked( - new Date(date + "T" + (timeValue == "" ? "00:00:00" : timeValue) + "Z") - ); - }; - const setTime = (time: string) => { - if (dateValue != "") { - const newDatetime = new Date(dateValue); - const timeParts = time.split(":").map(Number); - newDatetime.setUTCHours(timeParts[0]); - newDatetime.setUTCMinutes(timeParts[1]); - if (timeParts.length == 3) { - newDatetime.setUTCSeconds(timeParts[2]); - } - setDatetimeChecked(newDatetime); - } - }; - - return ( - - {label} - - setDate(e.target.value)} - size={"sm"} - > - setTime(e.target.value)} - size={"sm"} - > - setDatetime(undefined)} - > - - - - {error} - - ); -} diff --git a/src/components/sections/items.tsx b/src/components/sections/items.tsx deleted file mode 100644 index 0c558ac..0000000 --- a/src/components/sections/items.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { LuFiles } from "react-icons/lu"; -import { Link, List } from "@chakra-ui/react"; -import type { StacItem } from "stac-ts"; -import Section from "../section"; - -interface ItemsProps { - items: StacItem[]; - setHref: (href: string | undefined) => void; -} - -export default function ItemsSection({ - totalNumOfItems, - items, - ...props -}: { totalNumOfItems: number | undefined } & ItemsProps) { - const parenthetical = - items.length !== totalNumOfItems - ? `${items.length}/${totalNumOfItems}` - : items.length; - const title = `Items (${parenthetical})`; - return ( -
- -
- ); -} - -function Items({ - items, - setHref, -}: { - items: StacItem[]; - setHref: (href: string | undefined) => void; -}) { - return ( - - {items.map((item, i) => ( - - { - const selfHref = item.links.find( - (link) => link.rel === "self" - )?.href; - if (selfHref) setHref(selfHref); - }} - > - {item.id} - - - ))} - - ); -} diff --git a/src/components/sections/links.tsx b/src/components/sections/links.tsx deleted file mode 100644 index efb36b9..0000000 --- a/src/components/sections/links.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { LuArrowUpToLine, LuExternalLink, LuLink } from "react-icons/lu"; -import { ButtonGroup, IconButton, Link, List, Span } from "@chakra-ui/react"; -import type { StacLink } from "stac-ts"; -import Section from "../section"; - -const SET_HREF_REL_TYPES = [ - "root", - "parent", - "child", - "collection", - "item", - "search", - "items", -]; - -interface LinksProps { - links: StacLink[]; - setHref: (href: string | undefined) => void; -} - -export default function LinksSection({ ...props }: LinksProps) { - return ( -
- -
- ); -} - -function Links({ links, setHref }: LinksProps) { - return ( - - {links.map((link, i) => ( - - - {link.rel + (link.method ? ` (${link.method})` : "")} - - - {SET_HREF_REL_TYPES.includes(link.rel) && - (!link.method || link.method === "GET") && ( - { - e.preventDefault(); - setHref(link.href); - }} - > - - - - - )} - - - - - - - - ))} - - ); -} diff --git a/src/components/sections/properties.tsx b/src/components/sections/properties.tsx deleted file mode 100644 index e71ad38..0000000 --- a/src/components/sections/properties.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { LuList } from "react-icons/lu"; -import { Properties, type PropertiesProps } from "../properties"; -import Section from "../section"; - -export default function PropertiesSection({ ...props }: PropertiesProps) { - return ( -
- -
- ); -} diff --git a/src/components/skeleton-card.tsx b/src/components/skeleton-card.tsx new file mode 100644 index 0000000..38b75f0 --- /dev/null +++ b/src/components/skeleton-card.tsx @@ -0,0 +1,12 @@ +import { Card, Skeleton, SkeletonText } from "@chakra-ui/react"; + +export default function SkeletonCard() { + return ( + + + + + + + ); +} diff --git a/src/components/stac.tsx b/src/components/stac.tsx new file mode 100644 index 0000000..901f598 --- /dev/null +++ b/src/components/stac.tsx @@ -0,0 +1,23 @@ +import { + LuFile, + LuFileQuestion, + LuFiles, + LuFolder, + LuFolderPlus, +} from "react-icons/lu"; +import type { StacValue } from "../types/stac"; + +export function StacIcon({ value }: { value: StacValue }) { + switch (value.type) { + case "Collection": + return ; + case "Feature": + return ; + case "Catalog": + return ; + case "FeatureCollection": + return ; + default: + return ; + } +} diff --git a/src/components/thumbnail.tsx b/src/components/thumbnail.tsx new file mode 100644 index 0000000..da3d01b --- /dev/null +++ b/src/components/thumbnail.tsx @@ -0,0 +1,6 @@ +import { Image } from "@chakra-ui/react"; +import type { StacAsset } from "stac-ts"; + +export default function Thumbnail({ asset }: { asset: StacAsset }) { + return ; +} diff --git a/src/components/value-card.tsx b/src/components/value-card.tsx new file mode 100644 index 0000000..e57758a --- /dev/null +++ b/src/components/value-card.tsx @@ -0,0 +1,55 @@ +import { MarkdownHooks } from "react-markdown"; +import { Card } from "@chakra-ui/react"; +import type { StacCollection } from "stac-ts"; +import Thumbnail from "./thumbnail"; +import { Prose } from "./ui/prose"; +import { useStore } from "../store"; +import type { StacValue } from "../types/stac"; +import { + getSelfHref, + getStacValueTitle, + getThumbnailAsset, +} from "../utils/stac"; + +export default function ValueCard({ value }: { value: StacValue }) { + const href = getSelfHref(value); + const setHref = useStore((store) => store.setHref); + const hoveredCollection = useStore((store) => store.hoveredCollection); + const setHoveredCollection = useStore((store) => store.setHoveredCollection); + const thumbnailAsset = getThumbnailAsset(value); + const description = + "description" in value ? (value.description as string) : undefined; + + const isCollection = value.type === "Collection"; + const collection = isCollection ? (value as StacCollection) : null; + const hovered = isCollection && hoveredCollection === collection; + + return ( + href && setHref(href)} + onMouseEnter={() => collection && setHoveredCollection(collection)} + onMouseLeave={() => { + if (hoveredCollection === collection) setHoveredCollection(null); + }} + > + + {getStacValueTitle(value)} + + {(thumbnailAsset || description) && ( + + + {thumbnailAsset && } + {description && ( + + {description} + + )} + + + )} + + ); +} diff --git a/src/components/value-list-item.tsx b/src/components/value-list-item.tsx new file mode 100644 index 0000000..69c0f57 --- /dev/null +++ b/src/components/value-list-item.tsx @@ -0,0 +1,17 @@ +import { Link, List } from "@chakra-ui/react"; +import { useStore } from "../store"; +import type { StacValue } from "../types/stac"; +import { getSelfHref, getStacValueTitle } from "../utils/stac"; + +export default function ValueListItem({ value }: { value: StacValue }) { + const href = getSelfHref(value); + const setHref = useStore((store) => store.setHref); + + return ( + + href && setHref(href)}> + {getStacValueTitle(value)} + + + ); +} diff --git a/src/components/value.tsx b/src/components/value.tsx index 8f4315a..020e933 100644 --- a/src/components/value.tsx +++ b/src/components/value.tsx @@ -1,362 +1,178 @@ -import { useEffect, useMemo, useState } from "react"; import { - LuArrowLeft, - LuArrowRight, + LuArrowUp, + LuArrowUpLeft, LuExternalLink, - LuFile, - LuFileQuestion, - LuFiles, - LuFolder, - LuFolderPlus, - LuPause, - LuPlay, - LuStepForward, + LuFileJson, } from "react-icons/lu"; -import { MarkdownHooks } from "react-markdown"; import { - Accordion, + Badge, Button, ButtonGroup, - Card, + CloseButton, + CodeBlock, + createShikiAdapter, + Dialog, Heading, HStack, - Icon, - Image, - Span, + IconButton, + Portal, Stack, } from "@chakra-ui/react"; -import { useQuery } from "@tanstack/react-query"; -import type { StacCatalog, StacCollection, StacItem } from "stac-ts"; -import AssetsSection from "./sections/assets"; -import CatalogsSection from "./sections/catalogs"; -import CollectionSearchSection from "./sections/collection-search"; -import CollectionsSection from "./sections/collections"; -import FilterSection from "./sections/filter"; -import ItemSearchSection from "./sections/item-search"; -import ItemsSection from "./sections/items"; -import LinksSection from "./sections/links"; -import PropertiesSection from "./sections/properties"; -import { Prose } from "./ui/prose"; -import useStacCollections from "../hooks/stac-collections"; -import type { BBox2D } from "../types/map"; -import type { DatetimeBounds, StacSearch, StacValue } from "../types/stac"; -import { deconstructStac, fetchStac, getImportantLinks } from "../utils/stac"; - -export interface SharedValueProps { - catalogs: StacCatalog[] | undefined; - setCollections: (collections: StacCollection[] | undefined) => void; - collections: StacCollection[] | undefined; - items: StacItem[] | undefined; - setHref: (href: string | undefined) => void; - filter: boolean; - setFilter: (filter: boolean) => void; - bbox: BBox2D | undefined; - setItems: (items: StacItem[] | undefined) => void; - setDatetimeBounds: (bounds: DatetimeBounds | undefined) => void; - cogHref: string | undefined; - setcogHref: (href: string | undefined) => void; -} - -interface ValueProps extends SharedValueProps { - href: string; - value: StacValue; -} - -export function Value({ - href, - setHref, - value, - catalogs, - collections, - setCollections, - items, - setItems, - filter, - setFilter, - bbox, - setDatetimeBounds, - cogHref, - setcogHref, - totalNumOfCollections, - datetimes, -}: { - totalNumOfCollections: number | undefined; - datetimes: { - start: Date; - end: Date; - } | null; -} & ValueProps) { - const [search, setSearch] = useState(); - const [fetchAllCollections, setFetchAllCollections] = useState(false); - const [thumbnailError, setThumbnailError] = useState(false); - - const selfHref = value.links?.find((link) => link.rel === "self")?.href; - - const { - links, - assets, - properties: rawProperties, - } = useMemo(() => { - return deconstructStac(value); - }, [value]); - // Description is handled at the top of the panel, so we don't need it down in - // the properties. - const properties = useMemo(() => { - if (!rawProperties) return undefined; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { description, ...rest } = rawProperties; - return Object.keys(rest).length > 0 ? rest : undefined; - }, [rawProperties]); - - const { rootLink, collectionsLink, nextLink, prevLink, filteredLinks } = - useMemo(() => { - return getImportantLinks(links); - }, [links]); - - const rootData = useQuery({ - queryKey: ["stac-value", rootLink?.href], - enabled: !!rootLink, - queryFn: () => rootLink && fetchStac(rootLink.href), - }); - - const searchLinks = useMemo(() => { - return rootData.data?.links?.filter((link) => link.rel === "search"); - }, [rootData.data]); - - const collectionsResult = useStacCollections(collectionsLink?.href); - - const thumbnailAsset = useMemo(() => { - return ( - assets && - ((Object.keys(assets).includes("thumbnail") && assets["thumbnail"]) || - Object.values(assets).find((asset) => - asset.roles?.includes("thumbnail") - )) - ); - }, [assets]); - - const collectionsNumberMatched = useMemo(() => { - return collectionsResult.data?.pages.at(0)?.numberMatched; - }, [collectionsResult.data]); - - const totalNumOfItems = items?.length; - - useEffect(() => { - setCollections( - collectionsResult.data?.pages.flatMap((page) => page?.collections || []) - ); - }, [collectionsResult.data, setCollections]); - - useEffect(() => { - if ( - fetchAllCollections && - !collectionsResult.isFetching && - collectionsResult.hasNextPage - ) - collectionsResult.fetchNextPage(); - }, [fetchAllCollections, collectionsResult]); - - useEffect(() => { - setItems(undefined); - }, [search, setItems]); +import type { StacAsset } from "stac-ts"; +import type { HighlighterGeneric } from "shiki"; +import Assets from "./assets"; +import Children from "./children"; +import Collections from "./collections"; +import Description from "./description"; +import Root from "./root"; +import Thumbnail from "./thumbnail"; +import { useStore } from "../store"; +import type { StacValue } from "../types/stac"; +import { + getLinkHref, + getStacValueTitle, + getStacValueType, + getThumbnailAsset, +} from "../utils/stac"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const shikiAdapter = createShikiAdapter>({ + async load() { + const { createHighlighter } = await import("shiki"); + return createHighlighter({ + langs: ["json"], + themes: ["github-dark", "github-light"], + }); + }, + theme: { + light: "github-light", + dark: "github-dark", + }, +}); + +export default function Value({ value }: { value: StacValue }) { + const setHref = useStore((store) => store.setHref); + + const collectionsHref = getLinkHref(value, "data"); + const childrenLinks = value.links?.filter((link) => link.rel === "child"); + const selfHref = getLinkHref(value, "self"); + const rootHref = getLinkHref(value, "root"); + const parentHref = getLinkHref(value, "parent"); + const version = value.stac_version as string | undefined; + const thumbnailAsset = getThumbnailAsset(value); return ( - - - - {getValueIcon(value)} - {(value.title as string) || - value.id || - href.split("/").slice(-1)[0]?.split("?")[0]} - - + <> + + {getStacValueTitle(value)} - {thumbnailAsset && !thumbnailError && ( - setThumbnailError(true)} - maxH={"200"} - /> - )} - - {!!value.description && ( - - {value.description as string} - - )} - - {selfHref && ( - - - - {value.type === "Feature" && ( - - )} - - )} - - {(prevLink || nextLink) && ( - - {prevLink && ( - - )} - - {nextLink && ( - + + {value.id && ( + {getStacValueType(value)} )} - - )} + {version && {version}} + - {collectionsResult.hasNextPage && ( - - - Collection pagination - - - - - - - - - )} - - - {catalogs && catalogs.length > 0 && ( - - )} + )} + {selfHref && ( + + )} + + + - {collections && collections.length && ( - - )} + {thumbnailAsset && } - {collections && ( - + {"description" in value && ( + )} - {value.type === "Collection" && - searchLinks && - searchLinks.length > 0 && ( - - )} - - {(items || collections || value.type === "FeatureCollection") && ( - - )} + {rootHref && } - {items && ( - - )} + {collectionsHref && } - {assets && ( - + {!collectionsHref && childrenLinks && childrenLinks.length > 0 && ( + )} - {filteredLinks && filteredLinks.length > 0 && ( - + {(value.assets as { [k: string]: StacAsset }) && ( + )} - - {properties && } - - + + ); } -function getValueIcon(value: StacValue) { - switch (value.type) { - case "Catalog": - return ; - case "Collection": - return ; - case "Feature": - return ; - case "FeatureCollection": - return ; - default: - return ; - } +function JsonButton({ value }: { value: StacValue }) { + return ( + + + + + + + + + + JSON + + + + + + {value.id}.json + + + + + + + + + + + + + + + + + + + + + + ); } diff --git a/src/hooks/href-param.ts b/src/hooks/href-param.ts deleted file mode 100644 index 3d3521a..0000000 --- a/src/hooks/href-param.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { useEffect, useState } from "react"; - -function getCurrentHref(): string { - return new URLSearchParams(location.search).get("href") || ""; -} - -function getInitialHref(): string | undefined { - const href = getCurrentHref() || import.meta.env.VITE_DEFAULT_HREF || ""; - try { - new URL(href); - } catch { - return undefined; - } - return href; -} - -export default function useHrefParam() { - const [href, setHref] = useState(getInitialHref()); - - // Sync href with URL params - useEffect(() => { - if (href && getCurrentHref() != href) { - history.pushState(null, "", "?href=" + href); - } else if (href === "") { - history.pushState(null, "", location.pathname); - } - }, [href]); - - // Handle browser back/forward - useEffect(() => { - function handlePopState() { - setHref(getCurrentHref() ?? ""); - } - window.addEventListener("popstate", handlePopState); - - if (getCurrentHref()) { - try { - new URL(getCurrentHref()); - } catch { - history.pushState(null, "", location.pathname); - } - } - - return () => { - window.removeEventListener("popstate", handlePopState); - }; - }, []); - - return { href, setHref }; -} diff --git a/src/hooks/stac-children.ts b/src/hooks/stac-children.ts deleted file mode 100644 index 2ddc222..0000000 --- a/src/hooks/stac-children.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { useMemo } from "react"; -import { useQueries } from "@tanstack/react-query"; -import type { StacValue } from "../types/stac"; -import { getStacJsonValue } from "../utils/stac"; - -export default function useStacChildren({ - value, - enabled, -}: { - value: StacValue | undefined; - enabled: boolean; -}) { - const results = useQueries({ - queries: - value?.links - ?.filter((link) => link.rel === "child") - .map((link) => { - return { - queryKey: ["stac-value", link.href], - queryFn: () => getStacJsonValue(link.href), - enabled: enabled, - }; - }) || [], - combine: (results) => { - return { - data: results.map((result) => result.data), - }; - }, - }); - - return useMemo(() => { - const collections = []; - const catalogs = []; - for (const value of results.data) { - switch (value?.type) { - case "Catalog": - catalogs.push(value); - break; - case "Collection": - collections.push(value); - break; - } - } - return { - collections: collections.length > 0 ? collections : undefined, - catalogs: catalogs.length > 0 ? catalogs : undefined, - }; - }, [results.data]); -} diff --git a/src/hooks/stac-collections.ts b/src/hooks/stac-collections.ts deleted file mode 100644 index 7fc8745..0000000 --- a/src/hooks/stac-collections.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { useInfiniteQuery } from "@tanstack/react-query"; -import type { StacCollections } from "../types/stac"; - -export default function useStacCollections(href: string | undefined) { - return useInfiniteQuery({ - queryKey: ["stac-collections", href], - queryFn: async ({ pageParam }) => { - if (pageParam) { - return await fetch(pageParam).then((response) => { - if (response.ok) return response.json(); - else - throw new Error( - `Error while fetching collections from ${pageParam}` - ); - }); - } else { - return null; - } - }, - initialPageParam: href, - getNextPageParam: (lastPage: StacCollections | null) => - lastPage?.links?.find((link) => link.rel == "next")?.href, - enabled: !!href, - }); -} diff --git a/src/hooks/stac-filters.ts b/src/hooks/stac-filters.ts deleted file mode 100644 index 6d22e02..0000000 --- a/src/hooks/stac-filters.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { useMemo } from "react"; -import type { StacCollection, StacItem } from "stac-ts"; -import type { BBox2D } from "../types/map"; -import type { DatetimeBounds } from "../types/stac"; -import { - isCollectionInBbox, - isCollectionInDatetimeBounds, - isItemInBbox, - isItemInDatetimeBounds, -} from "../utils/stac"; - -interface UseStacFiltersProps { - collections?: StacCollection[]; - items?: StacItem[]; - filter: boolean; - bbox?: BBox2D; - datetimeBounds?: DatetimeBounds; -} - -export default function useStacFilters({ - collections, - items, - filter, - bbox, - datetimeBounds, -}: UseStacFiltersProps): { - filteredCollections: StacCollection[] | undefined; - filteredItems: StacItem[] | undefined; -} { - const filteredCollections = useMemo(() => { - if (filter && collections) { - const filtered = collections.filter( - (collection) => - (!bbox || isCollectionInBbox(collection, bbox)) && - (!datetimeBounds || - isCollectionInDatetimeBounds(collection, datetimeBounds)) - ); - return filtered; - } - return collections; - }, [collections, filter, bbox, datetimeBounds]); - - const filteredItems = useMemo(() => { - if (filter && items) { - const filtered = items.filter( - (item) => - (!bbox || isItemInBbox(item, bbox)) && - (!datetimeBounds || isItemInDatetimeBounds(item, datetimeBounds)) - ); - return filtered; - } - return items; - }, [items, filter, bbox, datetimeBounds]); - - return { filteredCollections, filteredItems }; -} diff --git a/src/hooks/stac-search.ts b/src/hooks/stac-search.ts deleted file mode 100644 index 5bdb2fd..0000000 --- a/src/hooks/stac-search.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { useInfiniteQuery } from "@tanstack/react-query"; -import type { StacLink } from "stac-ts"; -import type { StacItemCollection, StacSearch } from "../types/stac"; -import { fetchStac } from "../utils/stac"; - -export default function useStacSearch(search: StacSearch, link: StacLink) { - return useInfiniteQuery({ - queryKey: ["search", search, link], - initialPageParam: updateLink(link, search), - getNextPageParam: (lastPage: StacItemCollection) => - lastPage.links?.find((link) => link.rel == "next"), - queryFn: fetchSearch, - }); -} - -async function fetchSearch({ pageParam }: { pageParam: StacLink }) { - return (await fetchStac( - pageParam.href, - pageParam.method as "GET" | "POST" | undefined, - (pageParam.body as StacSearch) && JSON.stringify(pageParam.body) - )) as StacItemCollection; -} - -function updateLink(link: StacLink, search: StacSearch) { - if (!link.method) { - link.method = "GET"; - } - const url = new URL(link.href); - if (link.method == "GET") { - if (search.collections) { - url.searchParams.set("collections", search.collections.join(",")); - } - if (search.bbox) { - url.searchParams.set("bbox", search.bbox.join(",")); - } - if (search.datetime) { - url.searchParams.set("datetime", search.datetime); - } - } else { - link.body = search; - } - link.href = url.toString(); - return link; -} diff --git a/src/hooks/stac-value.ts b/src/hooks/stac-value.ts deleted file mode 100644 index 79f6e5c..0000000 --- a/src/hooks/stac-value.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { useEffect, useState } from "react"; -import type { UseFileUploadReturn } from "@chakra-ui/react"; -import { AsyncDuckDBConnection } from "@duckdb/duckdb-wasm"; -import { useQueries, useQuery } from "@tanstack/react-query"; -import type { Table } from "apache-arrow"; -import type { StacItem } from "stac-ts"; -import { useDuckDb } from "duckdb-wasm-kit"; -import type { DatetimeBounds, StacValue } from "../types/stac"; -import { getStacJsonValue } from "../utils/stac"; -import { - getStacGeoparquet, - getStacGeoparquetItem, - getStacGeoparquetTable, -} from "../utils/stac-geoparquet"; -import { ValidGeometryType } from "../utils/stac-geoparquet"; - -export interface GeoparquetTable { - // eslint-disable-next-line - table: Table | undefined; - geometryType: ValidGeometryType | undefined; -} - -export default function useStacValue({ - href, - fileUpload, - datetimeBounds, - stacGeoparquetItemId, -}: { - href: string | undefined; - fileUpload: UseFileUploadReturn; - datetimeBounds: DatetimeBounds | undefined; - stacGeoparquetItemId: string | undefined; -}) { - const { db } = useDuckDb(); - const [connection, setConnection] = useState(); - const enableStacGeoparquet = - (connection && href && href.endsWith(".parquet")) || false; - - useEffect(() => { - if (db && href?.endsWith(".parquet")) { - (async () => { - const connection = await db.connect(); - await connection.query("LOAD spatial;"); - await connection.query("LOAD icu;"); - try { - new URL(href); - } catch { - const file = fileUpload.acceptedFiles[0]; - db.registerFileBuffer(href, new Uint8Array(await file.arrayBuffer())); - } - setConnection(connection); - })(); - } - }, [db, href, fileUpload.acceptedFiles]); - - const jsonResult = useQuery({ - queryKey: ["stac-value", href], - queryFn: () => getStacJsonValue(href || "", fileUpload), - enabled: (href && !href.endsWith(".parquet")) || false, - }); - const stacGeoparquetResult = useQuery({ - queryKey: ["stac-geoparquet", href], - queryFn: () => - (href && connection && getStacGeoparquet(href, connection)) || null, - enabled: enableStacGeoparquet, - }); - const stacGeoparquetTableResult = useQuery({ - queryKey: ["stac-geoparquet-table", href, datetimeBounds], - queryFn: () => - (href && - connection && - getStacGeoparquetTable(href, connection, datetimeBounds)) || - null, - placeholderData: (previousData) => previousData, - enabled: enableStacGeoparquet, - }); - const stacGeoparquetItem = useQuery({ - queryKey: ["stac-geoparquet-item", href, stacGeoparquetItemId], - queryFn: () => - href && - connection && - stacGeoparquetItemId && - getStacGeoparquetItem(href, connection, stacGeoparquetItemId), - enabled: enableStacGeoparquet && !!stacGeoparquetItemId, - }); - const value = jsonResult.data || stacGeoparquetResult.data || undefined; - const table: GeoparquetTable | undefined = enableStacGeoparquet - ? { - table: stacGeoparquetTableResult.data?.table || undefined, - geometryType: stacGeoparquetTableResult.data?.geometryType || undefined, - } - : undefined; - - const error = - jsonResult.error || - stacGeoparquetResult.error || - stacGeoparquetTableResult.error || - undefined; - - const itemsResult = useQueries({ - queries: - value?.links - ?.filter((link) => link.rel === "item") - .map((link) => { - return { - queryKey: ["stac-value", link.href], - queryFn: () => getStacJsonValue(link.href) as Promise, - enabled: !!(href && value), - }; - }) || [], - combine: (results) => { - return { - data: results.map((result) => result.data).filter((value) => !!value), - }; - }, - }); - return { - value, - error, - geoparqetTable: table, - stacGeoparquetItem: stacGeoparquetItem.data, - items: itemsResult.data.length > 0 ? itemsResult.data : undefined, - }; -} diff --git a/src/hooks/stac.ts b/src/hooks/stac.ts new file mode 100644 index 0000000..38eb528 --- /dev/null +++ b/src/hooks/stac.ts @@ -0,0 +1,30 @@ +import { useEffect } from "react"; +import { useQuery } from "@tanstack/react-query"; +import { toaster } from "../components/ui/toaster"; +import { fetchStac } from "../utils/stac"; + +export function useStacJson({ + href, + enabled = true, +}: { + href: string; + enabled?: boolean; +}) { + const result = useQuery({ + queryKey: ["stac-json", href], + enabled, + queryFn: async () => await fetchStac({ href }), + }); + + useEffect(() => { + if (href && result.error) { + toaster.create({ + type: "error", + title: href, + description: result.error.message, + }); + } + }, [result.error, href]); + + return result; +} diff --git a/src/layers/overlay.tsx b/src/layers/overlay.tsx deleted file mode 100644 index ea8929c..0000000 --- a/src/layers/overlay.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { useState } from "react"; -import { LuUpload } from "react-icons/lu"; -import { - Box, - Button, - FileUpload, - GridItem, - HStack, - IconButton, - Input, - SimpleGrid, -} from "@chakra-ui/react"; -import Breadcrumbs from "../components/breadcrumbs"; -import { Examples } from "../components/examples"; -import Panel, { type PanelProps } from "../components/panel"; -import { ColorModeButton } from "../components/ui/color-mode"; -import type { StacValue } from "../types/stac"; - -export interface OverlayProps extends PanelProps { - picked: StacValue | undefined; - setPicked: (picked: StacValue | undefined) => void; -} - -export default function Overlay({ - href, - setHref, - fileUpload, - value, - picked, - setPicked, - items, - ...props -}: { - totalNumOfCollections: number | undefined; - datetimes: { - start: Date; - end: Date; - } | null; -} & OverlayProps) { - return ( - - - - - {(value && ( - - )) || stac-map} - - - - - - - - - - - - - - - - - - - - - - - - - ); -} - -function HrefInput({ - href, - setHref, -}: { - href: string | undefined; - setHref: (href: string | undefined) => void; -}) { - const [value, setValue] = useState(href || ""); - - return ( - { - e.preventDefault(); - setHref(value); - }} - flex="1" - > - setValue(e.target.value)} - > - - ); -} diff --git a/src/main.tsx b/src/main.tsx index 7856d0b..4b8ccc8 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,30 +1,15 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { ErrorBoundary } from "react-error-boundary"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { QueryClientProvider } from "@tanstack/react-query"; import App from "./app.tsx"; -import { ErrorComponent } from "./components/error.tsx"; import { Provider } from "./components/ui/provider.tsx"; - -const queryClient = new QueryClient({ - defaultOptions: { - queries: { - staleTime: Infinity, - retry: 1, - }, - }, -}); +import { queryClient } from "./query-client.ts"; createRoot(document.getElementById("root")!).render( - history.pushState(null, "", location.pathname)} - > - - + diff --git a/src/query-client.ts b/src/query-client.ts new file mode 100644 index 0000000..1b8866d --- /dev/null +++ b/src/query-client.ts @@ -0,0 +1,10 @@ +import { QueryClient } from "@tanstack/react-query"; + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: Infinity, + retry: 1, + }, + }, +}); diff --git a/src/store.ts b/src/store.ts new file mode 100644 index 0000000..cb7727f --- /dev/null +++ b/src/store.ts @@ -0,0 +1,90 @@ +import type { StacCollection, StacItem } from "stac-ts"; +import { create } from "zustand"; +import type { BBox2D } from "./types/map"; +import type { StacValue } from "./types/stac"; +import { getInitialHref } from "./utils/href"; + +interface State { + input: string; + setInput: (input: string) => void; + href: string | null; + setHref: (href: string | null) => void; + value: StacValue | null; + setValue: (value: StacValue | null) => void; + collections: StacCollection[] | null; + setCollections: (collections: StacCollection[] | null) => void; + addCollection: (collection: StacCollection) => void; + filteredCollections: StacCollection[] | null; + setFilteredCollections: (collections: StacCollection[] | null) => void; + searchItems: StacItem[] | null; + setSearchItems: (items: StacItem[] | null) => void; + hoveredCollection: StacCollection | null; + setHoveredCollection: (collection: StacCollection | null) => void; + hoveredItem: StacItem | null; + setHoveredItem: (item: StacItem | null) => void; + pickedItem: StacItem | null; + setPickedItem: (item: StacItem | null) => void; + + geotiffHref: string | null; + setGeotiffHref: (geotiffHref: string | null) => void; + + bbox: BBox2D | null; + setBbox: (bbox: BBox2D) => void; + + fillColor: [number, number, number, number]; + lineColor: [number, number, number, number]; + lineWidth: number; +} + +const initialHref = getInitialHref(); + +export const useStore = create((set, get) => ({ + input: initialHref || "", + setInput: (input) => set({ input }), + href: initialHref, + setHref: (href) => + set({ + href, + input: href || "", + value: null, + collections: null, + filteredCollections: null, + hoveredCollection: null, + hoveredItem: null, + pickedItem: null, + searchItems: null, + geotiffHref: null, + }), + value: null, + setValue: (value) => set({ value }), + collections: null, + setCollections: (collections) => set({ collections }), + addCollection: (collection) => { + const collections = get().collections; + if (!collections?.find((c) => c.id == collection.id)) { + set({ collections: [...(collections || []), collection] }); + } + }, + filteredCollections: null, + setFilteredCollections: (collections) => + set({ filteredCollections: collections }), + searchItems: null, + setSearchItems: (items) => set({ searchItems: items }), + hoveredCollection: null, + setHoveredCollection: (collection) => set({ hoveredCollection: collection }), + hoveredItem: null, + setHoveredItem: (item) => set({ hoveredItem: item }), + pickedItem: null, + setPickedItem: (item) => + set({ + pickedItem: item, + geotiffHref: null, + }), + geotiffHref: null, + setGeotiffHref: (geotiffHref) => set({ geotiffHref }), + bbox: null, + setBbox: (bbox) => set({ bbox }), + fillColor: [207, 63, 2, 50] as [number, number, number, number], + lineColor: [207, 63, 2, 100] as [number, number, number, number], + lineWidth: 2, +})); diff --git a/src/types/stac.d.ts b/src/types/stac.d.ts index 9435a74..315f7e7 100644 --- a/src/types/stac.d.ts +++ b/src/types/stac.d.ts @@ -32,8 +32,7 @@ export type StacAssets = { [k: string]: StacAsset }; export interface StacSearch { collections?: string[]; - datetime?: string; - bbox?: number[]; + bbox?: [number, number, number, number]; } export type DatetimeBounds = { start: Date; end: Date }; diff --git a/src/utils/datetimes.ts b/src/utils/datetimes.ts deleted file mode 100644 index 91a4893..0000000 --- a/src/utils/datetimes.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { StacCollection, StacItem } from "stac-ts"; -import type { StacValue } from "../types/stac"; -import { getItemDatetimes } from "../utils/stac"; - -const getDateTimes = ( - value: StacValue, - items: StacItem[] | undefined, - collections: StacCollection[] | undefined -) => { - let start = - value.start_datetime && typeof value.start_datetime === "string" - ? new Date(value.start_datetime as string) - : null; - let end = - value.end_datetime && typeof value.end_datetime === "string" - ? new Date(value.end_datetime as string) - : null; - - if (items) { - for (const item of items) { - const itemDatetimes = getItemDatetimes(item); - if (itemDatetimes.start && (!start || itemDatetimes.start < start)) - start = itemDatetimes.start; - if (itemDatetimes.end && (!end || itemDatetimes.end > end)) - end = itemDatetimes.end; - } - } - - if (collections) { - for (const collection of collections) { - const extents = collection.extent?.temporal?.interval?.[0]; - if (extents) { - const collectionStart = extents[0] ? new Date(extents[0]) : null; - if (collectionStart && (!start || collectionStart < start)) - start = collectionStart; - const collectionEnd = extents[1] ? new Date(extents[1]) : null; - if (collectionEnd && (!end || collectionEnd > end)) end = collectionEnd; - } - } - } - return start && end ? { start, end } : null; -}; - -export default getDateTimes; diff --git a/src/utils/href.ts b/src/utils/href.ts new file mode 100644 index 0000000..3ba5ea5 --- /dev/null +++ b/src/utils/href.ts @@ -0,0 +1,13 @@ +export function getCurrentHref(): string { + return new URLSearchParams(location.search).get("href") || ""; +} + +export function getInitialHref(): string | null { + const href = getCurrentHref() || import.meta.env.VITE_DEFAULT_HREF || ""; + try { + new URL(href); + } catch { + return null; + } + return href; +} diff --git a/src/utils/map.ts b/src/utils/map.ts new file mode 100644 index 0000000..ddb3e95 --- /dev/null +++ b/src/utils/map.ts @@ -0,0 +1,21 @@ +import type { SpatialExtent } from "stac-ts"; +import type { BBox } from "geojson"; +import type { BBox2D } from "../types/map"; + +export function sanitizeBbox(bbox: BBox | SpatialExtent): BBox2D { + if (bbox.length === 6) { + return [ + Math.max(bbox[0], -180), + Math.max(bbox[1], -90), + Math.min(bbox[3], 180), + Math.min(bbox[4], 90), + ]; + } else { + return [ + Math.max(bbox[0], -180), + Math.max(bbox[1], -90), + Math.min(bbox[2], 180), + Math.min(bbox[3], 90), + ]; + } +} diff --git a/src/utils/stac-geoparquet.ts b/src/utils/stac-geoparquet.ts deleted file mode 100644 index e92f0fb..0000000 --- a/src/utils/stac-geoparquet.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { io } from "@geoarrow/geoarrow-js"; -import type { AsyncDuckDBConnection } from "@duckdb/duckdb-wasm"; -import { - Binary, - Data, - makeData, - makeVector, - Table, - vectorFromArray, -} from "apache-arrow"; -import * as stacWasm from "stac-wasm"; -import type { DatetimeBounds, StacItemCollection } from "../types/stac"; - -// @ts-expect-error TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled. -export enum ValidGeometryType { - Point = "point", - Polygon = "polygon", -} - -const isValidGeometryType = ( - geometryType: string -): geometryType is ValidGeometryType => { - return Object.values(ValidGeometryType).includes( - geometryType as ValidGeometryType - ); -}; - -export async function getStacGeoparquet( - href: string, - connection: AsyncDuckDBConnection -) { - const { startDatetimeColumnName, endDatetimeColumnName } = - await getStacGeoparquetDatetimeColumns(href, connection); - - const query = - startDatetimeColumnName && endDatetimeColumnName - ? `SELECT COUNT(*) as count, MIN(bbox.xmin) as xmin, MIN(bbox.ymin) as ymin, MAX(bbox.xmax) as xmax, MAX(bbox.ymax) as ymax, MIN(${startDatetimeColumnName}) as start_datetime, MAX(${endDatetimeColumnName}) as end_datetime FROM read_parquet('${href}')` - : `SELECT COUNT(*) as count, MIN(bbox.xmin) as xmin, MIN(bbox.ymin) as ymin, MAX(bbox.xmax) as xmax, MAX(bbox.ymax) as ymax FROM read_parquet('${href}')`; - - const summaryResult = await connection.query(query); - const summaryRow = summaryResult.toArray().map((row) => row.toJSON())[0]; - - const kvMetadataResult = await connection.query( - `SELECT key, value FROM parquet_kv_metadata('${href}')` - ); - const decoder = new TextDecoder("utf-8"); - const kvMetadata = Object.fromEntries( - kvMetadataResult.toArray().map((row) => { - const jsonRow = row.toJSON(); - const key = decoder.decode(jsonRow.key); - let value; - try { - value = JSON.parse(decoder.decode(jsonRow.value)); - } catch { - // pass - } - return [key, value]; - }) - ); - - return { - type: "FeatureCollection", - bbox: [summaryRow.xmin, summaryRow.ymin, summaryRow.xmax, summaryRow.ymax], - features: [], - title: href.split("/").slice(-1)[0], - description: `A stac-geoparquet file with ${summaryRow.count} items`, - start_datetime: summaryRow.start_datetime - ? new Date(summaryRow.start_datetime).toLocaleString() - : null, - end_datetime: summaryRow.end_datetime - ? new Date(summaryRow.end_datetime).toLocaleString() - : null, - geoparquet_metadata: kvMetadata, - } as StacItemCollection; -} - -export async function getStacGeoparquetTable( - href: string, - connection: AsyncDuckDBConnection, - datetimeBounds: DatetimeBounds | undefined -) { - const { startDatetimeColumnName, endDatetimeColumnName } = - await getStacGeoparquetDatetimeColumns(href, connection); - - let query = `SELECT ST_AsWKB(geometry) AS geometry, ST_GeometryType(geometry) AS geometry_type, id FROM read_parquet('${href}')`; - if (datetimeBounds) { - query += ` WHERE ${startDatetimeColumnName} >= DATETIME '${datetimeBounds.start.toISOString()}' AND ${endDatetimeColumnName} <= DATETIME '${datetimeBounds.end.toISOString()}'`; - } - const result = await connection.query(query); - const geometry: Uint8Array[] = result.getChildAt(0)?.toArray(); - const geometryType: string = result - .getChildAt(1) - ?.toArray()[0] - ?.toLowerCase(); - if (!isValidGeometryType(geometryType)) { - throw new Error( - `Invalid geometry type: ${geometryType}. We currently do not support this type.` - ); - } - const wkb = new Uint8Array(geometry?.flatMap((array) => [...array])); - const valueOffsets = new Int32Array(geometry.length + 1); - for (let i = 0, len = geometry.length; i < len; i++) { - const current = valueOffsets[i]; - valueOffsets[i + 1] = current + geometry[i].length; - } - const data: Data = makeData({ - type: new Binary(), - data: wkb, - valueOffsets, - }); - let table: Table | undefined = undefined; - if (geometryType === ValidGeometryType.Polygon) { - const polygons = io.parseWkb(data, io.WKBType.Polygon, 2); - table = new Table({ - // @ts-expect-error: 2769 - geometry: makeVector(polygons), - id: vectorFromArray(result.getChild("id")?.toArray()), - }); - table.schema.fields[0].metadata.set( - "ARROW:extension:name", - "geoarrow.polygon" - ); - } else if (geometryType === ValidGeometryType.Point) { - const points = io.parseWkb(data, io.WKBType.Point, 2); - table = new Table({ - // @ts-expect-error: 2769 - geometry: points, - id: vectorFromArray(result.getChild("id")?.toArray()), - }); - table.schema.fields[0].metadata.set( - "ARROW:extension:name", - "geoarrow.point" - ); - } - - return { - table: table, - geometryType: geometryType, - }; -} - -export async function getStacGeoparquetItem( - href: string, - connection: AsyncDuckDBConnection, - id: string -) { - const result = await connection.query( - `SELECT * REPLACE ST_AsGeoJSON(geometry) as geometry FROM read_parquet('${href}') WHERE id = '${id}'` - ); - const item = stacWasm.arrowToStacJson(result)[0]; - item.geometry = JSON.parse(item.geometry); - return item; -} - -async function getStacGeoparquetDatetimeColumns( - href: string, - connection: AsyncDuckDBConnection -) { - const describeResult = await connection.query( - `DESCRIBE SELECT * FROM read_parquet('${href}')` - ); - const describe = describeResult.toArray().map((row) => row.toJSON()); - const columnNames = describe.map((row) => row.column_name); - const containsDates: boolean = columnNames.some((columnName: string) => { - return columnName.includes("date"); - }); - - if (!containsDates) - return { - startDatetimeColumnName: null, - endDatetimeColumnName: null, - }; - - const startDatetimeColumnName = columnNames.includes("start_datetime") - ? "start_datetime" - : "datetime"; - const endDatetimeColumnName = columnNames.includes("end_datetime") - ? "start_datetime" - : "datetime"; - return { startDatetimeColumnName, endDatetimeColumnName }; -} diff --git a/src/utils/stac.ts b/src/utils/stac.ts index 4a8b47b..4fbe009 100644 --- a/src/utils/stac.ts +++ b/src/utils/stac.ts @@ -1,38 +1,69 @@ -import type { UseFileUploadReturn } from "@chakra-ui/react"; -import type { StacAsset, StacCollection, StacItem, StacLink } from "stac-ts"; +import type { StacAsset, StacCollection, StacLink } from "stac-ts"; +import type { SpatialExtent } from "stac-ts"; +import { sanitizeBbox } from "./map"; import type { BBox2D } from "../types/map"; -import type { DatetimeBounds, StacAssets, StacValue } from "../types/stac"; +import type { StacValue } from "../types/stac"; -export async function getStacJsonValue( - href: string, - fileUpload?: UseFileUploadReturn -): Promise { - let url; - try { - url = new URL(href); - } catch { - if (fileUpload) { - return getStacJsonValueFromUpload(fileUpload); - } else { - throw new Error( - `Cannot get STAC JSON value from href=${href} without a fileUpload` - ); - } +export function getStacValueTitle(value: StacValue) { + if ("title" in value && value.title) { + return value.title as string; + } + return getStacValueId(value); +} + +export function getStacValueId(value: StacValue) { + if ("id" in value && value.id) { + return value.id; } - return await fetchStac(url); + return getStacValueType(value); +} + +export function getStacValueType(value: StacValue) { + switch (value.type) { + case "Collection": + return "Collection"; + case "Feature": + return "Item"; + case "Catalog": + return "Catalog"; + default: + return "unknown"; + } +} + +export function getLink( + value: { links?: Array }, + rel: string +): StacLink | undefined { + return value.links?.find((link) => link.rel === rel); } -async function getStacJsonValueFromUpload(fileUpload: UseFileUploadReturn) { - // We assume there's one and only on file. - const file = fileUpload.acceptedFiles[0]; - return JSON.parse(await file.text()); +export function getLinkHref( + value: { links?: Array }, + rel: string +): string | undefined { + return getLink(value, rel)?.href; } -export async function fetchStac( - href: string | URL, - method: "GET" | "POST" = "GET", - body?: string -): Promise { +export function getSelfHref(value: StacValue) { + return getLinkHref(value, "self"); +} + +export function getThumbnailAsset(value: StacValue) { + if ("assets" in value) { + return (value.assets as { [key: string]: StacAsset })["thumbnail"]; + } +} + +export async function fetchStac({ + href, + method = "GET", + body, +}: { + href: string | URL; + method?: "GET" | "POST"; + body?: string; +}): Promise { return await fetch(href, { method, headers: { @@ -43,10 +74,9 @@ export async function fetchStac( if (response.ok) { return response .json() - .then((json) => makeHrefsAbsolute(json, href.toString())) - .then((json) => maybeAddTypeField(json)); + .then((json) => makeHrefsAbsolute(json, href.toString())); } else { - throw new Error(`${method} ${href}: ${response.statusText}`); + throw new Error(`GET ${href}: ${response.statusText}`); } }); } @@ -105,36 +135,6 @@ function isAbsolute(url: string) { } } -// eslint-disable-next-line -function maybeAddTypeField(value: any) { - if (!value.type) { - if (value.features && Array.isArray(value.features)) { - value.type = "FeatureCollection"; - } else if (value.extent) { - value.type = "Collection"; - } else if (value.geometry && value.properties) { - value.type = "Feature"; - } else if (value.stac_version) { - value.type = "Catalog"; - } - } - return value; -} - -export function getItemDatetimes(item: StacItem) { - const start = item.properties?.start_datetime - ? new Date(item.properties.start_datetime) - : item.properties?.datetime - ? new Date(item.properties.datetime) - : null; - const end = item.properties?.end_datetime - ? new Date(item.properties.end_datetime) - : item.properties?.datetime - ? new Date(item.properties.datetime) - : null; - return { start, end }; -} - export function isCollectionInBbox(collection: StacCollection, bbox: BBox2D) { if (bbox[2] - bbox[0] >= 360) { // A global bbox always contains every collection @@ -161,110 +161,17 @@ export function isCollectionInBbox(collection: StacCollection, bbox: BBox2D) { } } -export function isCollectionInDatetimeBounds( - collection: StacCollection, - bounds: DatetimeBounds -) { - const interval = collection.extent.temporal.interval[0]; - const start = interval[0] ? new Date(interval[0]) : null; - const end = interval[1] ? new Date(interval[1]) : null; - return !((end && end < bounds.start) || (start && start > bounds.end)); -} - -export function isItemInBbox(item: StacItem, bbox: BBox2D) { - if (bbox[2] - bbox[0] >= 360) { - // A global bbox always contains every item - return true; - } - const itemBbox = item.bbox; - if (itemBbox) { - return ( - !( - itemBbox[0] < bbox[0] && - itemBbox[1] < bbox[1] && - itemBbox[2] > bbox[2] && - itemBbox[3] > bbox[3] - ) && - !( - itemBbox[0] > bbox[2] || - itemBbox[1] > bbox[3] || - itemBbox[2] < bbox[0] || - itemBbox[3] < bbox[1] - ) - ); - } else { - return false; - } -} - -export function isItemInDatetimeBounds(item: StacItem, bounds: DatetimeBounds) { - const datetimes = getItemDatetimes(item); - return !( - (datetimes.end && datetimes.end < bounds.start) || - (datetimes.start && datetimes.start > bounds.end) - ); +export function isGlobalCollection(collection: StacCollection) { + const bbox = sanitizeBbox(getCollectionExtents(collection)); + return bbox[0] == -180 && bbox[1] == -90 && bbox[2] == 180 && bbox[3] == 90; } -export function deconstructStac(value: StacValue) { - if (value.type === "Feature") { - return { - links: value.links, - assets: value.assets as StacAssets | undefined, - properties: value.properties, - }; - } else { - const { links, assets, ...properties } = value; - return { - links: links || [], - assets: assets as StacAssets | undefined, - properties, - }; - } -} - -export function getImportantLinks(links: StacLink[]) { - let rootLink: StacLink | undefined = undefined; - let collectionsLink: StacLink | undefined = undefined; - let nextLink: StacLink | undefined = undefined; - let prevLink: StacLink | undefined = undefined; - const filteredLinks = []; - if (links) { - for (const link of links) { - switch (link.rel) { - case "root": - rootLink = link; - break; - case "data": - collectionsLink = link; - break; - case "next": - nextLink = link; - break; - case "previous": - prevLink = link; - break; - } - // We already show children and items in their own pane - if (link.rel !== "child" && link.rel !== "item") filteredLinks.push(link); - } - } - return { rootLink, collectionsLink, nextLink, prevLink, filteredLinks }; -} - -export function isGeoTiff(asset: StacAsset) { - return asset.type?.startsWith("image/tiff; application=geotiff"); -} - -export function getCogHref(value: StacValue): string | undefined { - if (!value.assets) { - return undefined; - } - - for (const asset of Object.values(value.assets)) { - if (isGeoTiff(asset)) { - return asset.href as string; - } - } - - return undefined; +export function getCollectionExtents( + collection: StacCollection +): SpatialExtent { + const spatialExtent = collection.extent?.spatial; + // check if bbox is a list of lists, otherwise its a single list of nums + return Array.isArray(spatialExtent?.bbox?.[0]) + ? spatialExtent?.bbox[0] + : (spatialExtent?.bbox as unknown as SpatialExtent); } diff --git a/src/utils/title.ts b/src/utils/title.ts deleted file mode 100644 index 0c49f8b..0000000 --- a/src/utils/title.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { StacValue } from "../types/stac"; - -export default function getDocumentTitle(value: StacValue | undefined) { - let title = "stac-map"; - if (value && (value.title || value.id)) { - title = "stac-map | " + (value.title || value.id); - } - return title; -} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 11f02fe..2bcf87e 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1 +1,10 @@ /// + +interface ImportMetaEnv { + readonly VITE_STAC_BROWSER_URL?: string; + readonly VITE_STAC_NATURAL_QUERY_API?: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/tests/app.spec.tsx b/tests/app.spec.tsx index 30a30a4..43198d3 100644 --- a/tests/app.spec.tsx +++ b/tests/app.spec.tsx @@ -3,7 +3,6 @@ import { describe, expect, test } from "vitest"; import { render } from "vitest-browser-react"; import App from "../src/app"; import { Provider } from "../src/components/ui/provider"; -import { EXAMPLES } from "../src/constants"; const queryClient = new QueryClient(); @@ -30,74 +29,16 @@ describe("app", () => { await expect .element( app.getByRole("textbox", { - name: "Enter a url to STAC JSON or GeoParquet", + name: "Enter a url", }) ) .toBeVisible(); }); - test("has an upload button", async () => { - const app = await renderApp(); - await expect - .element(app.getByRole("button", { name: "upload" })) - .toBeVisible(); - }); - test("has a color mode button", async () => { const app = await renderApp(); await expect .element(app.getByRole("button", { name: "Toggle color mode" })) .toBeVisible(); }); - - describe.for(EXAMPLES)("example $title", ({ title }) => { - test("updates title", async ({ expect }) => { - const app = await renderApp(); - await app.getByRole("button", { name: "Examples" }).click(); - await app.getByRole("menuitem", { name: title }).click(); - expect(document.title !== "stac-map"); - }); - }); - - test.skip("CSDA Planet", async () => { - // https://github.com/developmentseed/stac-map/issues/96 - window.history.pushState( - {}, - "", - "?href=https://csdap.earthdata.nasa.gov/stac/collections/planet" - ); - const app = await renderApp(); - await expect - .element(app.getByRole("heading", { name: "Planet" })) - .toBeVisible(); - }); - - test("renders download buttons", async () => { - window.history.pushState( - {}, - "", - "?href=https://stac.eoapi.dev/collections/MAXAR_yellowstone_flooding22" - ); - const app = await renderApp(); - await app.getByRole("button", { name: "Item search" }).click(); - await app.getByRole("button", { name: "Search", exact: true }).click(); - await expect - .element(app.getByRole("button", { name: "JSON" })) - .toBeVisible(); - await expect - .element(app.getByRole("button", { name: "stac-geoparquet" })) - .toBeVisible(); - }); - - test("paginates collections", async () => { - window.history.pushState({}, "", "?href=https://stac.eoapi.dev"); - const app = await renderApp(); - await expect - .element(app.getByRole("button", { name: "Fetch more collections" })) - .toBeVisible(); - await expect - .element(app.getByRole("button", { name: "Fetch all collections" })) - .toBeVisible(); - await app.getByRole("button", { name: "Fetch more collections" }).click(); - }); }); diff --git a/tests/hooks/document-title.spec.ts b/tests/hooks/document-title.spec.ts deleted file mode 100644 index 4a3316d..0000000 --- a/tests/hooks/document-title.spec.ts +++ /dev/null @@ -1,198 +0,0 @@ -import type { StacCatalog, StacCollection, StacItem } from "stac-ts"; -import { afterEach, beforeEach, describe, expect, test } from "vitest"; -import type { StacItemCollection, StacValue } from "../../src/types/stac"; -import getDocumentTitle from "../../src/utils/title"; - -describe("useDocumentTitle logic", () => { - let originalTitle: string; - - beforeEach(() => { - if (typeof document !== "undefined") { - originalTitle = document.title; - } - }); - - afterEach(() => { - if (typeof document !== "undefined") { - document.title = originalTitle; - } - }); - - function setDocumentTitle(value: StacValue | undefined) { - document.title = getDocumentTitle(value); - } - - test("should set default title when value is undefined", () => { - setDocumentTitle(undefined); - - expect(document.title).toBe("stac-map"); - }); - - test("should set title with catalog title", () => { - const catalog: StacCatalog = { - id: "test-catalog", - type: "Catalog", - title: "Test Catalog", - description: "A test catalog", - stac_version: "1.0.0", - links: [], - }; - - setDocumentTitle(catalog); - - expect(document.title).toBe("stac-map | Test Catalog"); - }); - - test("should set title with catalog id when title is missing", () => { - const catalog: StacCatalog = { - id: "test-catalog", - type: "Catalog", - description: "A test catalog", - stac_version: "1.0.0", - links: [], - }; - - setDocumentTitle(catalog); - - expect(document.title).toBe("stac-map | test-catalog"); - }); - - test("should set title with collection title", () => { - const collection: StacCollection = { - id: "test-collection", - type: "Collection", - title: "Test Collection", - description: "A test collection", - stac_version: "1.0.0", - license: "MIT", - extent: { - spatial: { - bbox: [[-180, -90, 180, 90]], - }, - temporal: { - interval: [[null, null]], - }, - }, - links: [], - }; - - setDocumentTitle(collection); - - expect(document.title).toBe("stac-map | Test Collection"); - }); - - test("should set title with item title", () => { - const item: StacItem = { - id: "test-item", - type: "Feature", - title: "Test Item", - stac_version: "1.0.0", - geometry: { - type: "Point", - coordinates: [0, 0], - }, - properties: { - datetime: "2020-01-01T00:00:00Z", - }, - links: [], - assets: {}, - }; - - setDocumentTitle(item); - - expect(document.title).toBe("stac-map | Test Item"); - }); - - test("should set title with item collection title", () => { - const itemCollection: StacItemCollection = { - type: "FeatureCollection", - title: "Test Item Collection", - features: [], - }; - - setDocumentTitle(itemCollection); - - expect(document.title).toBe("stac-map | Test Item Collection"); - }); - - test("should set title with item collection id when title is missing", () => { - const itemCollection: StacItemCollection = { - type: "FeatureCollection", - id: "test-item-collection", - features: [], - }; - - setDocumentTitle(itemCollection); - - expect(document.title).toBe("stac-map | test-item-collection"); - }); - - test("should prefer title over id when both are present", () => { - const catalog: StacCatalog = { - id: "catalog-id", - type: "Catalog", - title: "Catalog Title", - description: "A test catalog", - stac_version: "1.0.0", - links: [], - }; - - setDocumentTitle(catalog); - - expect(document.title).toBe("stac-map | Catalog Title"); - }); - - test("should handle value without title or id", () => { - const itemCollection: StacItemCollection = { - type: "FeatureCollection", - features: [], - }; - - setDocumentTitle(itemCollection); - - expect(document.title).toBe("stac-map"); - }); - - test("should update title when value changes", () => { - const catalog1: StacCatalog = { - id: "catalog1", - type: "Catalog", - title: "First Catalog", - description: "First catalog", - stac_version: "1.0.0", - links: [], - }; - - const catalog2: StacCatalog = { - id: "catalog2", - type: "Catalog", - title: "Second Catalog", - description: "Second catalog", - stac_version: "1.0.0", - links: [], - }; - - setDocumentTitle(catalog1); - expect(document.title).toBe("stac-map | First Catalog"); - - setDocumentTitle(catalog2); - expect(document.title).toBe("stac-map | Second Catalog"); - }); - - test("should reset to default title when value becomes undefined", () => { - const catalog: StacCatalog = { - id: "test-catalog", - type: "Catalog", - title: "Test Catalog", - description: "A test catalog", - stac_version: "1.0.0", - links: [], - }; - - setDocumentTitle(catalog); - expect(document.title).toBe("stac-map | Test Catalog"); - - setDocumentTitle(undefined); - expect(document.title).toBe("stac-map"); - }); -}); diff --git a/tests/hooks/href-param.spec.ts b/tests/hooks/href-param.spec.ts deleted file mode 100644 index b396383..0000000 --- a/tests/hooks/href-param.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { beforeEach, describe, expect, test } from "vitest"; - -// Test the getInitialHref logic by importing and testing the hook behavior -describe("useHrefParam", () => { - beforeEach(() => { - // Reset URL to clean state - if (typeof window !== "undefined") { - history.replaceState({}, "", "/"); - } - }); - - test("should parse valid URL from href parameter", () => { - const href = "https://example.com/catalog.json"; - const url = new URL(`http://localhost/?href=${href}`); - const params = new URLSearchParams(url.search); - const parsedHref = params.get("href") || ""; - - let isValid = false; - try { - new URL(parsedHref); - isValid = true; - } catch { - isValid = false; - } - - expect(isValid).toBe(true); - expect(parsedHref).toBe(href); - }); - - test("should reject invalid URLs in href parameter", () => { - const href = "not-a-valid-url"; - const url = new URL(`http://localhost/?href=${href}`); - const params = new URLSearchParams(url.search); - const parsedHref = params.get("href") || ""; - - let isValid = false; - try { - new URL(parsedHref); - isValid = true; - } catch { - isValid = false; - } - - expect(isValid).toBe(false); - }); - - test("should handle empty href parameter", () => { - const url = new URL(`http://localhost/`); - const params = new URLSearchParams(url.search); - const parsedHref = params.get("href") || ""; - - expect(parsedHref).toBe(""); - }); - - test("should construct proper query string with href", () => { - const href = "https://example.com/catalog.json"; - const queryString = "?href=" + href; - - expect(queryString).toBe("?href=https://example.com/catalog.json"); - }); - - test("should handle file upload state", () => { - const mockFile = { name: "test.json" }; - const acceptedFiles = [mockFile]; - - expect(acceptedFiles.length).toBe(1); - expect(acceptedFiles[0].name).toBe("test.json"); - }); -}); diff --git a/tests/hooks/stac-filters.spec.ts b/tests/hooks/stac-filters.spec.ts deleted file mode 100644 index 179ce61..0000000 --- a/tests/hooks/stac-filters.spec.ts +++ /dev/null @@ -1,211 +0,0 @@ -import type { StacCollection, StacItem } from "stac-ts"; -import { describe, expect, test } from "vitest"; -import type { BBox2D } from "../../src/types/map"; -import type { DatetimeBounds } from "../../src/types/stac"; -import { - isCollectionInBbox, - isCollectionInDatetimeBounds, - isItemInBbox, - isItemInDatetimeBounds, -} from "../../src/utils/stac"; - -describe("useStacFilters logic", () => { - const mockCollection1: StacCollection = { - id: "collection1", - type: "Collection", - stac_version: "1.0.0", - description: "Test collection 1", - license: "MIT", - extent: { - spatial: { - bbox: [[-180, -90, 180, 90]], - }, - temporal: { - interval: [["2020-01-01T00:00:00Z", "2020-12-31T23:59:59Z"]], - }, - }, - links: [], - }; - - const mockCollection2: StacCollection = { - id: "collection2", - type: "Collection", - stac_version: "1.0.0", - description: "Test collection 2", - license: "MIT", - extent: { - spatial: { - bbox: [[0, 0, 10, 10]], - }, - temporal: { - interval: [["2021-01-01T00:00:00Z", "2021-12-31T23:59:59Z"]], - }, - }, - links: [], - }; - - const mockItem1: StacItem = { - id: "item1", - type: "Feature", - stac_version: "1.0.0", - geometry: { - type: "Point", - coordinates: [0, 0], - }, - bbox: [-1, -1, 1, 1], - properties: { - datetime: "2020-06-15T00:00:00Z", - }, - links: [], - assets: {}, - }; - - const mockItem2: StacItem = { - id: "item2", - type: "Feature", - stac_version: "1.0.0", - geometry: { - type: "Point", - coordinates: [50, 50], - }, - bbox: [49, 49, 51, 51], - properties: { - datetime: "2021-06-15T00:00:00Z", - }, - links: [], - assets: {}, - }; - - test("should filter collections by bbox", () => { - const bbox: BBox2D = [0, 0, 10, 10]; - - const filtered = [mockCollection1, mockCollection2].filter((collection) => - isCollectionInBbox(collection, bbox) - ); - - // collection1 has global bbox, collection2 overlaps with the filter bbox - expect(filtered.length).toBe(1); - expect(filtered.map((c) => c.id)).toContain("collection2"); - }); - - test("should filter collections by datetime bounds", () => { - const datetimeBounds: DatetimeBounds = { - start: new Date("2020-01-01"), - end: new Date("2020-12-31"), - }; - - const filtered = [mockCollection1, mockCollection2].filter((collection) => - isCollectionInDatetimeBounds(collection, datetimeBounds) - ); - - expect(filtered.length).toBe(1); - expect(filtered[0].id).toBe("collection1"); - }); - - test("should filter collections by both bbox and datetime bounds", () => { - const bbox: BBox2D = [0, 0, 10, 10]; - const datetimeBounds: DatetimeBounds = { - start: new Date("2021-01-01"), - end: new Date("2021-12-31"), - }; - - const filtered = [mockCollection1, mockCollection2].filter( - (collection) => - isCollectionInBbox(collection, bbox) && - isCollectionInDatetimeBounds(collection, datetimeBounds) - ); - - expect(filtered.length).toBe(1); - expect(filtered[0].id).toBe("collection2"); - }); - - test("should filter items by bbox", () => { - const bbox: BBox2D = [-5, -5, 5, 5]; - - const filtered = [mockItem1, mockItem2].filter((item) => - isItemInBbox(item, bbox) - ); - - expect(filtered.length).toBe(1); - expect(filtered[0].id).toBe("item1"); - }); - - test("should filter items by datetime bounds", () => { - const datetimeBounds: DatetimeBounds = { - start: new Date("2020-01-01"), - end: new Date("2020-12-31"), - }; - - const filtered = [mockItem1, mockItem2].filter((item) => - isItemInDatetimeBounds(item, datetimeBounds) - ); - - expect(filtered.length).toBe(1); - expect(filtered[0].id).toBe("item1"); - }); - - test("should filter items by both bbox and datetime bounds", () => { - const bbox: BBox2D = [-5, -5, 5, 5]; - const datetimeBounds: DatetimeBounds = { - start: new Date("2020-01-01"), - end: new Date("2020-12-31"), - }; - - const filtered = [mockItem1, mockItem2].filter( - (item) => - isItemInBbox(item, bbox) && isItemInDatetimeBounds(item, datetimeBounds) - ); - - expect(filtered.length).toBe(1); - expect(filtered[0].id).toBe("item1"); - }); - - test("should return empty array when no items match filters", () => { - const bbox: BBox2D = [100, 100, 110, 110]; - - const filtered = [mockItem1, mockItem2].filter((item) => - isItemInBbox(item, bbox) - ); - - expect(filtered.length).toBe(0); - }); - - test("should handle global bbox (360 degrees wide)", () => { - const globalBbox: BBox2D = [-180, -90, 180, 90]; - - const filteredCollections = [mockCollection1, mockCollection2].filter( - (collection) => isCollectionInBbox(collection, globalBbox) - ); - - const filteredItems = [mockItem1, mockItem2].filter((item) => - isItemInBbox(item, globalBbox) - ); - - // Global bbox should include all collections and items - expect(filteredCollections.length).toBe(2); - expect(filteredItems.length).toBe(2); - }); - - test("should not filter when filter is false (logic test)", () => { - const filter = false; - const collections = [mockCollection1, mockCollection2]; - - const result = filter ? collections.filter(() => true) : undefined; - - expect(result).toBeUndefined(); - }); - - test("should filter when filter is true (logic test)", () => { - const filter = true; - const collections = [mockCollection1, mockCollection2]; - const bbox: BBox2D = [0, 0, 10, 10]; - - const result = filter - ? collections.filter((c) => isCollectionInBbox(c, bbox)) - : undefined; - - expect(result).toBeDefined(); - expect(result?.length).toBe(1); - expect(result?.[0].id).toBe("collection2"); - }); -}); diff --git a/yarn.lock b/yarn.lock index 90f634d..32ed2e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,131 +2,132 @@ # yarn lockfile v1 -"@actions/core@^1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.11.1.tgz#ae683aac5112438021588030efb53b1adb86f172" - integrity sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A== +"@actions/core@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@actions/core/-/core-2.0.2.tgz#81c59e1f3437660d2148a064c1ba8e99931f2cf7" + integrity sha512-Ast1V7yHbGAhplAsuVlnb/5J8Mtr/Zl6byPPL+Qjq3lmfIgWF1ak1iYfF/079cRERiuTALTXkSuEUdZeDCfGtA== dependencies: - "@actions/exec" "^1.1.1" - "@actions/http-client" "^2.0.1" + "@actions/exec" "^2.0.0" + "@actions/http-client" "^3.0.1" -"@actions/exec@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.1.1.tgz#2e43f28c54022537172819a7cf886c844221a611" - integrity sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w== +"@actions/exec@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-2.0.0.tgz#35e829723389f80e362ec2cc415697ec74362ad8" + integrity sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw== dependencies: - "@actions/io" "^1.0.1" + "@actions/io" "^2.0.0" -"@actions/http-client@^2.0.1": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.3.tgz#31fc0b25c0e665754ed39a9f19a8611fc6dab674" - integrity sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA== +"@actions/http-client@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-3.0.1.tgz#0ac91c3abf179a401e23d40abf0d7caa92324268" + integrity sha512-SbGS8c/vySbNO3kjFgSW77n83C4MQx/Yoe+b1hAdpuvfHxnkHzDq2pWljUpAA56Si1Gae/7zjeZsV0CYjmLo/w== dependencies: tunnel "^0.0.6" - undici "^5.25.4" + undici "^5.28.5" -"@actions/io@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.1.3.tgz#4cdb6254da7962b07473ff5c335f3da485d94d71" - integrity sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q== +"@actions/io@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@actions/io/-/io-2.0.0.tgz#3ad1271ba3cd515324f2215e8d4c1c0c3864d65b" + integrity sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg== "@ark-ui/react@^5.29.1": - version "5.29.1" - resolved "https://registry.yarnpkg.com/@ark-ui/react/-/react-5.29.1.tgz#1714d827ca56ceb1b26be451bc5e2c3f28222d58" - integrity sha512-HY6plob4CuDBMXqeYBSqjDzKziWoiTb5atDjBEw+jJIfwRdZcChdRHm1IPCFZ9LiQ5toa67748JFzo683UzqVg== + version "5.30.0" + resolved "https://registry.yarnpkg.com/@ark-ui/react/-/react-5.30.0.tgz#57f82e5f91e7f3af6adc1b470b8deda322d135af" + integrity sha512-MIWgj6uWTuG42DGaXUQARObvuQJymm+/1wsdGEDrIHtSv0a2PFQO4svwMvMFwfFbL1jVkJzzBU6JDAH0xKbvyw== dependencies: "@internationalized/date" "3.10.0" - "@zag-js/accordion" "1.29.1" - "@zag-js/anatomy" "1.29.1" - "@zag-js/angle-slider" "1.29.1" - "@zag-js/async-list" "1.29.1" - "@zag-js/auto-resize" "1.29.1" - "@zag-js/avatar" "1.29.1" - "@zag-js/bottom-sheet" "1.29.1" - "@zag-js/carousel" "1.29.1" - "@zag-js/checkbox" "1.29.1" - "@zag-js/clipboard" "1.29.1" - "@zag-js/collapsible" "1.29.1" - "@zag-js/collection" "1.29.1" - "@zag-js/color-picker" "1.29.1" - "@zag-js/color-utils" "1.29.1" - "@zag-js/combobox" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/date-picker" "1.29.1" - "@zag-js/date-utils" "1.29.1" - "@zag-js/dialog" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/editable" "1.29.1" - "@zag-js/file-upload" "1.29.1" - "@zag-js/file-utils" "1.29.1" - "@zag-js/floating-panel" "1.29.1" - "@zag-js/focus-trap" "1.29.1" - "@zag-js/highlight-word" "1.29.1" - "@zag-js/hover-card" "1.29.1" - "@zag-js/i18n-utils" "1.29.1" - "@zag-js/image-cropper" "1.29.1" - "@zag-js/json-tree-utils" "1.29.1" - "@zag-js/listbox" "1.29.1" - "@zag-js/marquee" "1.29.1" - "@zag-js/menu" "1.29.1" - "@zag-js/number-input" "1.29.1" - "@zag-js/pagination" "1.29.1" - "@zag-js/password-input" "1.29.1" - "@zag-js/pin-input" "1.29.1" - "@zag-js/popover" "1.29.1" - "@zag-js/presence" "1.29.1" - "@zag-js/progress" "1.29.1" - "@zag-js/qr-code" "1.29.1" - "@zag-js/radio-group" "1.29.1" - "@zag-js/rating-group" "1.29.1" - "@zag-js/react" "1.29.1" - "@zag-js/scroll-area" "1.29.1" - "@zag-js/select" "1.29.1" - "@zag-js/signature-pad" "1.29.1" - "@zag-js/slider" "1.29.1" - "@zag-js/splitter" "1.29.1" - "@zag-js/steps" "1.29.1" - "@zag-js/switch" "1.29.1" - "@zag-js/tabs" "1.29.1" - "@zag-js/tags-input" "1.29.1" - "@zag-js/timer" "1.29.1" - "@zag-js/toast" "1.29.1" - "@zag-js/toggle" "1.29.1" - "@zag-js/toggle-group" "1.29.1" - "@zag-js/tooltip" "1.29.1" - "@zag-js/tour" "1.29.1" - "@zag-js/tree-view" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + "@zag-js/accordion" "1.31.1" + "@zag-js/anatomy" "1.31.1" + "@zag-js/angle-slider" "1.31.1" + "@zag-js/async-list" "1.31.1" + "@zag-js/auto-resize" "1.31.1" + "@zag-js/avatar" "1.31.1" + "@zag-js/bottom-sheet" "1.31.1" + "@zag-js/carousel" "1.31.1" + "@zag-js/checkbox" "1.31.1" + "@zag-js/clipboard" "1.31.1" + "@zag-js/collapsible" "1.31.1" + "@zag-js/collection" "1.31.1" + "@zag-js/color-picker" "1.31.1" + "@zag-js/color-utils" "1.31.1" + "@zag-js/combobox" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/date-picker" "1.31.1" + "@zag-js/date-utils" "1.31.1" + "@zag-js/dialog" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/editable" "1.31.1" + "@zag-js/file-upload" "1.31.1" + "@zag-js/file-utils" "1.31.1" + "@zag-js/floating-panel" "1.31.1" + "@zag-js/focus-trap" "1.31.1" + "@zag-js/highlight-word" "1.31.1" + "@zag-js/hover-card" "1.31.1" + "@zag-js/i18n-utils" "1.31.1" + "@zag-js/image-cropper" "1.31.1" + "@zag-js/json-tree-utils" "1.31.1" + "@zag-js/listbox" "1.31.1" + "@zag-js/marquee" "1.31.1" + "@zag-js/menu" "1.31.1" + "@zag-js/navigation-menu" "1.31.1" + "@zag-js/number-input" "1.31.1" + "@zag-js/pagination" "1.31.1" + "@zag-js/password-input" "1.31.1" + "@zag-js/pin-input" "1.31.1" + "@zag-js/popover" "1.31.1" + "@zag-js/presence" "1.31.1" + "@zag-js/progress" "1.31.1" + "@zag-js/qr-code" "1.31.1" + "@zag-js/radio-group" "1.31.1" + "@zag-js/rating-group" "1.31.1" + "@zag-js/react" "1.31.1" + "@zag-js/scroll-area" "1.31.1" + "@zag-js/select" "1.31.1" + "@zag-js/signature-pad" "1.31.1" + "@zag-js/slider" "1.31.1" + "@zag-js/splitter" "1.31.1" + "@zag-js/steps" "1.31.1" + "@zag-js/switch" "1.31.1" + "@zag-js/tabs" "1.31.1" + "@zag-js/tags-input" "1.31.1" + "@zag-js/timer" "1.31.1" + "@zag-js/toast" "1.31.1" + "@zag-js/toggle" "1.31.1" + "@zag-js/toggle-group" "1.31.1" + "@zag-js/tooltip" "1.31.1" + "@zag-js/tour" "1.31.1" + "@zag-js/tree-view" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7" + integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q== dependencies: - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.2": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" - integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== +"@babel/compat-data@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c" + integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg== "@babel/core@^7.24.4", "@babel/core@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" - integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.5" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.28.3" - "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.5" - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.5" - "@babel/types" "^7.28.5" + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.6.tgz#531bf883a1126e53501ba46eb3bb414047af507f" + integrity sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/generator" "^7.28.6" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -134,23 +135,23 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.28.0", "@babel/generator@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" - integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== +"@babel/generator@^7.28.0", "@babel/generator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.6.tgz#48dcc65d98fcc8626a48f72b62e263d25fc3c3f1" + integrity sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw== dependencies: - "@babel/parser" "^7.28.5" - "@babel/types" "^7.28.5" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" -"@babel/helper-compilation-targets@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== +"@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== dependencies: - "@babel/compat-data" "^7.27.2" + "@babel/compat-data" "^7.28.6" "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" @@ -161,34 +162,34 @@ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/helper-module-transforms@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" - integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== +"@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" "@babel/helper-plugin-utils@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" + integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": +"@babel/helper-validator-identifier@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== @@ -198,20 +199,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" - integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== dependencies: - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.4", "@babel/parser@^7.27.2", "@babel/parser@^7.28.0", "@babel/parser@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" - integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.4", "@babel/parser@^7.28.0", "@babel/parser@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd" + integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ== dependencies: - "@babel/types" "^7.28.5" + "@babel/types" "^7.28.6" "@babel/plugin-transform-react-jsx-self@^7.27.1": version "7.27.1" @@ -228,44 +229,44 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" - integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== - -"@babel/template@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" - integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.5" + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== + +"@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/traverse@^7.28.0", "@babel/traverse@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e" + integrity sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/generator" "^7.28.6" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.5" - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.5" + "@babel/parser" "^7.28.6" + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.0", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" - integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.28.0", "@babel/types@^7.28.2", "@babel/types@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" + integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" "@carto/api-client@^0.5.19": - version "0.5.22" - resolved "https://registry.yarnpkg.com/@carto/api-client/-/api-client-0.5.22.tgz#d66c5f551a10f101e74728a7b3cc27a95ad9129b" - integrity sha512-JkScXPWoAIi+NxIafLnHYHVLayH8Ofp/eODIsqHAz0MtZH4X2iGMkQsTNJyt6+U5zmIP7Xd8DksXMkGGosDc8g== + version "0.5.24" + resolved "https://registry.yarnpkg.com/@carto/api-client/-/api-client-0.5.24.tgz#999b1f2ae8cca72c3b3ea57f728e509da4715781" + integrity sha512-BeHxVxOZsQDZlh6mnPIwK0yMejSUtReNn877NDhJ+B0LRR8Apz0tNTpvKvWiy3WApjNGrelRplYcc4dS2iflYA== dependencies: "@loaders.gl/schema" "^4.3.3" "@types/geojson" "^7946.0.16" @@ -364,7 +365,7 @@ gl-matrix "^3.0.0" mjolnir.js "^3.0.0" -"@deck.gl/extensions@9.2.5": +"@deck.gl/extensions@9.2.5", "@deck.gl/extensions@^9.2.5": version "9.2.5" resolved "https://registry.yarnpkg.com/@deck.gl/extensions/-/extensions-9.2.5.tgz#2f399497777a810c3bb85bf01e0694edefdfdc7e" integrity sha512-GJRPmG+GD1tdblpplQlb4jlNywRb8aQYPEowPLKxglXSGRzgpOrqJYI1PcJhCowdL7/S8bCY1ay8nkXE3gRsgw== @@ -435,7 +436,7 @@ "@luma.gl/constants" "^9.2.4" "@math.gl/web-mercator" "^4.1.0" -"@deck.gl/mesh-layers@9.2.5": +"@deck.gl/mesh-layers@9.2.5", "@deck.gl/mesh-layers@^9.2.5": version "9.2.5" resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-9.2.5.tgz#28b17c13ed9258502748559f88e752a0dc240ab5" integrity sha512-OJ7Nx6xhp7+bQ4S4asUUp7PdGwcfmQpQhe5SHDGy1UBZ0yZE+ojOo9uvVfXvGBnqq4Zpg9avV+WRN1/BffBsOw== @@ -584,144 +585,137 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== -"@esbuild/aix-ppc64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.1.tgz#116edcd62c639ed8ab551e57b38251bb28384de4" - integrity sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA== - -"@esbuild/android-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.1.tgz#31c00d864c80f6de1900a11de8a506dbfbb27349" - integrity sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ== - -"@esbuild/android-arm@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.1.tgz#d2b73ab0ba894923a1d1378fd4b15cc20985f436" - integrity sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg== - -"@esbuild/android-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.1.tgz#d9f74d8278191317250cfe0c15a13f410540b122" - integrity sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ== - -"@esbuild/darwin-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.1.tgz#baf6914b8c57ed9d41f9de54023aa3ff9b084680" - integrity sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ== - -"@esbuild/darwin-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.1.tgz#64e37400795f780a76c858a118ff19681a64b4e0" - integrity sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ== - -"@esbuild/freebsd-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.1.tgz#6572f2f235933eee906e070dfaae54488ee60acd" - integrity sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg== - -"@esbuild/freebsd-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.1.tgz#83105dba9cf6ac4f44336799446d7f75c8c3a1e1" - integrity sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ== - -"@esbuild/linux-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.1.tgz#035ff647d4498bdf16eb2d82801f73b366477dfa" - integrity sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q== - -"@esbuild/linux-arm@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.1.tgz#3516c74d2afbe305582dbb546d60f7978a8ece7f" - integrity sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA== - -"@esbuild/linux-ia32@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.1.tgz#788db5db8ecd3d75dd41c42de0fe8f1fd967a4a7" - integrity sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw== - -"@esbuild/linux-loong64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.1.tgz#8211f08b146916a6302ec2b8f87ec0cc4b62c49e" - integrity sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg== - -"@esbuild/linux-mips64el@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.1.tgz#cc58586ea83b3f171e727a624e7883a1c3eb4c04" - integrity sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA== - -"@esbuild/linux-ppc64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.1.tgz#632477bbd98175cf8e53a7c9952d17fb2d6d4115" - integrity sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ== - -"@esbuild/linux-riscv64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.1.tgz#35435a82435a8a750edf433b83ac0d10239ac3fe" - integrity sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ== - -"@esbuild/linux-s390x@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.1.tgz#172edd7086438edacd86c0e2ea25ac9dbb62aac5" - integrity sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw== - -"@esbuild/linux-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.1.tgz#09c771de9e2d8169d5969adf298ae21581f08c7f" - integrity sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA== - -"@esbuild/netbsd-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.1.tgz#475ac0ce7edf109a358b1669f67759de4bcbb7c4" - integrity sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ== - -"@esbuild/netbsd-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.1.tgz#3c31603d592477dc43b63df1ae100000f7fb59d7" - integrity sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg== - -"@esbuild/openbsd-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.1.tgz#482067c847665b10d66431e936d4bc5fa8025abf" - integrity sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g== - -"@esbuild/openbsd-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.1.tgz#687a188c2b184e5b671c5f74a6cd6247c0718c52" - integrity sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg== - -"@esbuild/openharmony-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.1.tgz#9929ee7fa8c1db2f33ef4d86198018dac9c1744f" - integrity sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg== - -"@esbuild/sunos-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.1.tgz#94071a146f313e7394c6424af07b2b564f1f994d" - integrity sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA== - -"@esbuild/win32-arm64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.1.tgz#869fde72a3576fdf48824085d05493fceebe395d" - integrity sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg== - -"@esbuild/win32-ia32@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.1.tgz#31d7585893ed7b54483d0b8d87a4bfeba0ecfff5" - integrity sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ== - -"@esbuild/win32-x64@0.27.1": - version "0.27.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.1.tgz#5efe5a112938b1180e98c76685ff9185cfa4f16e" - integrity sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw== - -"@eslint-community/eslint-utils@^4.8.0": - version "4.9.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" - integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/eslint-utils@^4.9.1": +"@esbuild/aix-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz#521cbd968dcf362094034947f76fa1b18d2d403c" + integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== + +"@esbuild/android-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz#61ea550962d8aa12a9b33194394e007657a6df57" + integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== + +"@esbuild/android-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.2.tgz#554887821e009dd6d853f972fde6c5143f1de142" + integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== + +"@esbuild/android-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.2.tgz#a7ce9d0721825fc578f9292a76d9e53334480ba2" + integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== + +"@esbuild/darwin-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz#2cb7659bd5d109803c593cfc414450d5430c8256" + integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== + +"@esbuild/darwin-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz#e741fa6b1abb0cd0364126ba34ca17fd5e7bf509" + integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== + +"@esbuild/freebsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz#2b64e7116865ca172d4ce034114c21f3c93e397c" + integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== + +"@esbuild/freebsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz#e5252551e66f499e4934efb611812f3820e990bb" + integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== + +"@esbuild/linux-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz#dc4acf235531cd6984f5d6c3b13dbfb7ddb303cb" + integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== + +"@esbuild/linux-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz#56a900e39240d7d5d1d273bc053daa295c92e322" + integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== + +"@esbuild/linux-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz#d4a36d473360f6870efcd19d52bbfff59a2ed1cc" + integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== + +"@esbuild/linux-loong64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz#fcf0ab8c3eaaf45891d0195d4961cb18b579716a" + integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== + +"@esbuild/linux-mips64el@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz#598b67d34048bb7ee1901cb12e2a0a434c381c10" + integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== + +"@esbuild/linux-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz#3846c5df6b2016dab9bc95dde26c40f11e43b4c0" + integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== + +"@esbuild/linux-riscv64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz#173d4475b37c8d2c3e1707e068c174bb3f53d07d" + integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== + +"@esbuild/linux-s390x@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz#f7a4790105edcab8a5a31df26fbfac1aa3dacfab" + integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== + +"@esbuild/linux-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz#2ecc1284b1904aeb41e54c9ddc7fcd349b18f650" + integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== + +"@esbuild/netbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz#e2863c2cd1501845995cb11adf26f7fe4be527b0" + integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== + +"@esbuild/netbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz#93f7609e2885d1c0b5a1417885fba8d1fcc41272" + integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== + +"@esbuild/openbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz#a1985604a203cdc325fd47542e106fafd698f02e" + integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== + +"@esbuild/openbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz#8209e46c42f1ffbe6e4ef77a32e1f47d404ad42a" + integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== + +"@esbuild/openharmony-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz#8fade4441893d9cc44cbd7dcf3776f508ab6fb2f" + integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== + +"@esbuild/sunos-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz#980d4b9703a16f0f07016632424fc6d9a789dfc2" + integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== + +"@esbuild/win32-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz#1c09a3633c949ead3d808ba37276883e71f6111a" + integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== + +"@esbuild/win32-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz#1b1e3a63ad4bef82200fef4e369e0fff7009eee5" + integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== + +"@esbuild/win32-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" + integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== + +"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== @@ -757,9 +751,9 @@ "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" - integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -767,7 +761,7 @@ globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^4.1.0" + js-yaml "^4.1.1" minimatch "^3.1.2" strip-json-comments "^3.1.1" @@ -888,18 +882,6 @@ dependencies: "@isaacs/balanced-match" "^4.0.1" -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - "@isaacs/fs-minipass@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" @@ -1371,20 +1353,20 @@ lru-cache "^11.2.1" socks-proxy-agent "^8.0.3" -"@npmcli/arborist@^9.1.7": - version "9.1.7" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-9.1.7.tgz#8e92d27d9ae7d0b565b518fcf227a7e349243e65" - integrity sha512-Qz/PbocuzbIk8T8+92zoI5Yt3mqYaCUgUxSQgMcJOxA4PsMOlExamXmn6Q+3TOyqBepXTszsWtuO5FCk7wzajg== +"@npmcli/arborist@^9.1.9": + version "9.1.9" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-9.1.9.tgz#1458850184fa97967263c67c6f34a052ac632b46" + integrity sha512-O/rLeBo64mkUn1zU+1tFDWXvbAA9UXe9eUldwTwRLxOLFx9obqjNoozW65LmYqgWb0DG40i9lNZSv78VX2GKhw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^4.0.0" + "@npmcli/fs" "^5.0.0" "@npmcli/installed-package-contents" "^4.0.0" "@npmcli/map-workspaces" "^5.0.0" "@npmcli/metavuln-calculator" "^9.0.2" "@npmcli/name-from-folder" "^4.0.0" "@npmcli/node-gyp" "^5.0.0" "@npmcli/package-json" "^7.0.0" - "@npmcli/query" "^4.0.0" + "@npmcli/query" "^5.0.0" "@npmcli/redact" "^4.0.0" "@npmcli/run-script" "^10.0.0" bin-links "^6.0.0" @@ -1394,7 +1376,7 @@ json-stringify-nice "^1.1.4" lru-cache "^11.2.1" minimatch "^10.0.3" - nopt "^8.0.0" + nopt "^9.0.0" npm-install-checks "^8.0.0" npm-package-arg "^13.0.0" npm-pick-manifest "^11.0.1" @@ -1402,7 +1384,7 @@ pacote "^21.0.2" parse-conflict-json "^5.0.1" proc-log "^6.0.0" - proggy "^3.0.0" + proggy "^4.0.0" promise-all-reject-late "^1.0.0" promise-call-limit "^3.0.1" semver "^7.3.7" @@ -1410,27 +1392,20 @@ treeverse "^3.0.0" walk-up-path "^4.0.0" -"@npmcli/config@^10.4.3": - version "10.4.3" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-10.4.3.tgz#42ca5fa8a8195040fa8f8004c2e8ddb8d5b3d105" - integrity sha512-Kwi6xP4AONtRCOg+MZdlIPjoc8/UvGI5eleGehknscDpnWeCD7mnTC36Y69gKeAVdMwHhsOaGvOErv4eGmUQjQ== +"@npmcli/config@^10.4.5": + version "10.4.5" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-10.4.5.tgz#6b5bfe6326d8ffe0c53998ea59b3b338a972a058" + integrity sha512-i3d+ysO0ix+2YGXLxKu44cEe9z47dtUPKbiPLFklDZvp/rJAsLmeWG2Bf6YKuqR8jEhMl/pHw1pGOquJBxvKIA== dependencies: "@npmcli/map-workspaces" "^5.0.0" "@npmcli/package-json" "^7.0.0" ci-info "^4.0.0" ini "^6.0.0" - nopt "^8.1.0" + nopt "^9.0.0" proc-log "^6.0.0" semver "^7.3.5" walk-up-path "^4.0.0" -"@npmcli/fs@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-4.0.0.tgz#a1eb1aeddefd2a4a347eca0fab30bc62c0e1c0f2" - integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== - dependencies: - semver "^7.3.5" - "@npmcli/fs@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-5.0.0.tgz#674619771907342b3d1ac197aaf1deeb657e3539" @@ -1452,14 +1427,6 @@ semver "^7.3.5" which "^6.0.0" -"@npmcli/installed-package-contents@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz#2c1170ff4f70f68af125e2842e1853a93223e4d1" - integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== - dependencies: - npm-bundled "^4.0.0" - npm-normalize-package-bin "^4.0.0" - "@npmcli/installed-package-contents@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz#18e5070704cfe0278f9ae48038558b6efd438426" @@ -1468,7 +1435,7 @@ npm-bundled "^5.0.0" npm-normalize-package-bin "^5.0.0" -"@npmcli/map-workspaces@^5.0.0", "@npmcli/map-workspaces@^5.0.1": +"@npmcli/map-workspaces@^5.0.0", "@npmcli/map-workspaces@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz#5b887ec0b535a2ba64d1d338867326a2b9c041d1" integrity sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw== @@ -1499,7 +1466,7 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz#35475a58b5d791764a7252231197a14deefe8e47" integrity sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ== -"@npmcli/package-json@^7.0.0", "@npmcli/package-json@^7.0.2": +"@npmcli/package-json@^7.0.0", "@npmcli/package-json@^7.0.4": version "7.0.4" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.4.tgz#f4178e5d90b888f3bdf666915706f613c2d870d7" integrity sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ== @@ -1519,10 +1486,10 @@ dependencies: which "^6.0.0" -"@npmcli/query@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-4.0.1.tgz#f8a538807f2d0059c0bee7f4a1f712b73ae47603" - integrity sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw== +"@npmcli/query@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-5.0.0.tgz#c8cb9ec42c2ef149077282e948dc068ecc79ee11" + integrity sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ== dependencies: postcss-selector-parser "^7.0.0" @@ -1633,9 +1600,9 @@ "@octokit/openapi-types" "^27.0.0" "@pandacss/is-valid-prop@^1.4.2": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-1.5.1.tgz#5e0e757ef078246280dbc55c447cd4ec0382242f" - integrity sha512-AlOt+MqqwDlIdVEdW6wEtvDmX8MmPv004oD+7tdGN54HKpD9jqrwPwwS9p7YQ7nai631JlyladshFHqe1xl7+w== + version "1.8.1" + resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-1.8.1.tgz#8d23dd897a006c21f5ce0bcb66759b1b625d3b9a" + integrity sha512-gf2HTBCOboc65Jlb9swAjbffXSIv+A4vzSQ9iHyTCDLMcXTHYjPOQNliI36WkuQgR0pNXggBbQXGNaT9wKcrAw== "@petamoriken/float16@^3.4.7": version "3.9.3" @@ -1695,115 +1662,130 @@ resolved "https://registry.yarnpkg.com/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz#17e17eeecb4c9fa1c0a6e72c9e5f66382fddbb82" integrity sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A== -"@rollup/rollup-android-arm-eabi@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz#7131f3d364805067fd5596302aad9ebef1434b32" - integrity sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA== - -"@rollup/rollup-android-arm64@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz#7ede14d7fcf7c57821a2731c04b29ccc03145d82" - integrity sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g== - -"@rollup/rollup-darwin-arm64@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz#d59bf9ed582b38838e86a17f91720c17db6575b9" - integrity sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ== - -"@rollup/rollup-darwin-x64@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz#a76278d9b9da9f84ea7909a14d93b915d5bbe01e" - integrity sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw== - -"@rollup/rollup-freebsd-arm64@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz#1a94821a1f565b9eaa74187632d482e4c59a1707" - integrity sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA== - -"@rollup/rollup-freebsd-x64@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz#aad2274680106b2b6549b1e35e5d3a7a9f1f16af" - integrity sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA== - -"@rollup/rollup-linux-arm-gnueabihf@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz#100fe4306399ffeec47318a3c9b8c0e5e8b07ddb" - integrity sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg== - -"@rollup/rollup-linux-arm-musleabihf@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz#b84634952604b950e18fa11fddebde898c5928d8" - integrity sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q== - -"@rollup/rollup-linux-arm64-gnu@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz#dad6f2fb41c2485f29a98e40e9bd78253255dbf3" - integrity sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA== - -"@rollup/rollup-linux-arm64-musl@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz#0f3f77c8ce9fbf982f8a8378b70a73dc6704a706" - integrity sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ== - -"@rollup/rollup-linux-loong64-gnu@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz#870bb94e9dad28bb3124ba49bd733deaa6aa2635" - integrity sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ== - -"@rollup/rollup-linux-ppc64-gnu@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz#188427d11abefc6c9926e3870b3e032170f5577c" - integrity sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g== - -"@rollup/rollup-linux-riscv64-gnu@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz#9dec6eadbbb5abd3b76fe624dc4f006913ff4a7f" - integrity sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA== - -"@rollup/rollup-linux-riscv64-musl@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz#b26ba1c80b6f104dc5bd83ed83181fc0411a0c38" - integrity sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ== - -"@rollup/rollup-linux-s390x-gnu@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz#dc83647189b68ad8d56a956a6fcaa4ee9c728190" - integrity sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w== - -"@rollup/rollup-linux-x64-gnu@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz#42c3b8c94e9de37bd103cb2e26fb715118ef6459" - integrity sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw== - -"@rollup/rollup-linux-x64-musl@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz#d0e216ee1ea16bfafe35681b899b6a05258988e5" - integrity sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA== - -"@rollup/rollup-openharmony-arm64@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz#3acd0157cb8976f659442bfd8a99aca46f8a2931" - integrity sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A== - -"@rollup/rollup-win32-arm64-msvc@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz#3eb9e7d4d0e1d2e0850c4ee9aa2d0ddf89a8effa" - integrity sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA== - -"@rollup/rollup-win32-ia32-msvc@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz#d69280bc6680fe19e0956e965811946d542f6365" - integrity sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg== - -"@rollup/rollup-win32-x64-gnu@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz#d182ce91e342bad9cbb8b284cf33ac542b126ead" - integrity sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw== - -"@rollup/rollup-win32-x64-msvc@4.53.2": - version "4.53.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz#d9ab606437fd072b2cb7df7e54bcdc7f1ccbe8b4" - integrity sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA== +"@rollup/rollup-android-arm-eabi@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz#76e0fef6533b3ce313f969879e61e8f21f0eeb28" + integrity sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg== + +"@rollup/rollup-android-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz#d3cfc675a40bbdec97bda6d7fe3b3b05f0e1cd93" + integrity sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg== + +"@rollup/rollup-darwin-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz#eb912b8f59dd47c77b3c50a78489013b1d6772b4" + integrity sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg== + +"@rollup/rollup-darwin-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz#e7d0839fdfd1276a1d34bc5ebbbd0dfd7d0b81a0" + integrity sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ== + +"@rollup/rollup-freebsd-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz#7ff8118760f7351e48fd0cd3717ff80543d6aac8" + integrity sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg== + +"@rollup/rollup-freebsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz#49d330dadbda1d4e9b86b4a3951b59928a9489a9" + integrity sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw== + +"@rollup/rollup-linux-arm-gnueabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz#98c5f1f8b9776b4a36e466e2a1c9ed1ba52ef1b6" + integrity sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ== + +"@rollup/rollup-linux-arm-musleabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz#b9acecd3672e742f70b0c8a94075c816a91ff040" + integrity sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg== + +"@rollup/rollup-linux-arm64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz#7a6ab06651bc29e18b09a50ed1a02bc972977c9b" + integrity sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ== + +"@rollup/rollup-linux-arm64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz#3c8c9072ba4a4d4ef1156b85ab9a2cbb57c1fad0" + integrity sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA== + +"@rollup/rollup-linux-loong64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz#17a7af13530f4e4a7b12cd26276c54307a84a8b0" + integrity sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g== + +"@rollup/rollup-linux-loong64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz#5cd7a900fd7b077ecd753e34a9b7ff1157fe70c1" + integrity sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw== + +"@rollup/rollup-linux-ppc64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz#03a097e70243ddf1c07b59d3c20f38e6f6800539" + integrity sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw== + +"@rollup/rollup-linux-ppc64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz#a5389873039d4650f35b4fa060d286392eb21a94" + integrity sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw== + +"@rollup/rollup-linux-riscv64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz#789e60e7d6e2b76132d001ffb24ba80007fb17d0" + integrity sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw== + +"@rollup/rollup-linux-riscv64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz#3556fa88d139282e9a73c337c9a170f3c5fe7aa4" + integrity sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg== + +"@rollup/rollup-linux-s390x-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz#c085995b10143c16747a67f1a5487512b2ff04b2" + integrity sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg== + +"@rollup/rollup-linux-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz#9563a5419dd2604841bad31a39ccfdd2891690fb" + integrity sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg== + +"@rollup/rollup-linux-x64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz#691bb06e6269a8959c13476b0cd2aa7458facb31" + integrity sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w== + +"@rollup/rollup-openbsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz#223e71224746a59ce6d955bbc403577bb5a8be9d" + integrity sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg== + +"@rollup/rollup-openharmony-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz#0817e5d8ecbfeb8b7939bf58f8ce3c9dd67fce77" + integrity sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw== + +"@rollup/rollup-win32-arm64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz#de56d8f2013c84570ef5fb917aae034abda93e4a" + integrity sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g== + +"@rollup/rollup-win32-ia32-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz#659aff5244312475aeea2c9479a6c7d397b517bf" + integrity sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA== + +"@rollup/rollup-win32-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz#2cb09549cbb66c1b979f9238db6dd454cac14a88" + integrity sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg== + +"@rollup/rollup-win32-x64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz#f79437939020b83057faf07e98365b1fa51c458b" + integrity sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw== "@sec-ant/readable-stream@^0.4.1": version "0.4.1" @@ -1853,11 +1835,11 @@ url-join "^5.0.0" "@semantic-release/npm@^13.1.1": - version "13.1.2" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-13.1.2.tgz#f19ad4275e487e5b633e42e6b7dc41d499ce0280" - integrity sha512-9rtshDTNlzYrC7uSBtB1vHqFzFZaNHigqkkCH5Ls4N/BSlVOenN5vtwHYxjAR4jf1hNvWSVwL4eIFTHONYckkw== + version "13.1.3" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-13.1.3.tgz#f75bc82e005fcb859932461bfc5583746a31f6c1" + integrity sha512-q7zreY8n9V0FIP1Cbu63D+lXtRAVAIWb30MH5U3TdrfXt6r2MIrWCY0whAImN53qNvSGp0Zt07U95K+Qp9GpEg== dependencies: - "@actions/core" "^1.11.1" + "@actions/core" "^2.0.0" "@semantic-release/error" "^4.0.0" aggregate-error "^5.0.0" env-ci "^11.2.0" @@ -1889,6 +1871,60 @@ lodash-es "^4.17.21" read-package-up "^11.0.0" +"@shikijs/core@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-3.21.0.tgz#9641d09865c43612b28e7931f9af68c8a62edd90" + integrity sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA== + dependencies: + "@shikijs/types" "3.21.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + hast-util-to-html "^9.0.5" + +"@shikijs/engine-javascript@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz#f04554fe87bed39d00ba4b140894b41cd207f5cb" + integrity sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ== + dependencies: + "@shikijs/types" "3.21.0" + "@shikijs/vscode-textmate" "^10.0.2" + oniguruma-to-es "^4.3.4" + +"@shikijs/engine-oniguruma@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz#0e666454a03fd85d6c634d9dbe70a63f007a6323" + integrity sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ== + dependencies: + "@shikijs/types" "3.21.0" + "@shikijs/vscode-textmate" "^10.0.2" + +"@shikijs/langs@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.21.0.tgz#da33400a85c7cba75fc9f4a6b9feb69a6c39c800" + integrity sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA== + dependencies: + "@shikijs/types" "3.21.0" + +"@shikijs/themes@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.21.0.tgz#1955d642ea37d70d1137e6cf47da7dc9c34ff4c0" + integrity sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw== + dependencies: + "@shikijs/types" "3.21.0" + +"@shikijs/types@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.21.0.tgz#510d6ddbea65add27980a6ca36cc7bdabc7afe90" + integrity sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA== + dependencies: + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" + integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== + "@sigstore/bundle@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-4.0.0.tgz#854eda43eb6a59352037e49000177c8904572f83" @@ -1896,43 +1932,43 @@ dependencies: "@sigstore/protobuf-specs" "^0.5.0" -"@sigstore/core@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-3.0.0.tgz#42f42f733596f26eb055348635098fa28676f117" - integrity sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg== +"@sigstore/core@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-3.1.0.tgz#b418de73f56333ad9e369b915173d8c98e9b96d5" + integrity sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A== "@sigstore/protobuf-specs@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz#e5f029edcb3a4329853a09b603011e61043eb005" integrity sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA== -"@sigstore/sign@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-4.0.1.tgz#36ed397d0528e4da880b9060e26234098de5d35b" - integrity sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA== +"@sigstore/sign@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-4.1.0.tgz#63df15a137337b29f463a1d1c51e1f7d4c1db2f1" + integrity sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg== dependencies: "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.0.0" + "@sigstore/core" "^3.1.0" "@sigstore/protobuf-specs" "^0.5.0" - make-fetch-happen "^15.0.2" - proc-log "^5.0.0" + make-fetch-happen "^15.0.3" + proc-log "^6.1.0" promise-retry "^2.0.1" -"@sigstore/tuf@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-4.0.0.tgz#8b3ae2bd09e401386d5b6842a46839e8ff484e6c" - integrity sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w== +"@sigstore/tuf@^4.0.0", "@sigstore/tuf@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-4.0.1.tgz#9b080390936d79ea3b6a893b64baf3123e92d6d3" + integrity sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw== dependencies: "@sigstore/protobuf-specs" "^0.5.0" - tuf-js "^4.0.0" + tuf-js "^4.1.0" -"@sigstore/verify@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-3.0.0.tgz#59a1ffa98246f8b3f91a17459e3532095ee7fbb7" - integrity sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw== +"@sigstore/verify@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-3.1.0.tgz#4046d4186421db779501fe87fa5acaa5d4d21b08" + integrity sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag== dependencies: "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.0.0" + "@sigstore/core" "^3.1.0" "@sigstore/protobuf-specs" "^0.5.0" "@sindresorhus/is@^4.6.0": @@ -1946,78 +1982,78 @@ integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== "@standard-schema/spec@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c" - integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA== - -"@swc/core-darwin-arm64@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.2.tgz#591fde48757f9c66f050eb82353def199c9967af" - integrity sha512-Ghyz4RJv4zyXzrUC1B2MLQBbppIB5c4jMZJybX2ebdEQAvryEKp3gq1kBksCNsatKGmEgXul88SETU19sMWcrw== - -"@swc/core-darwin-x64@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.2.tgz#f0c229fd21b0ef658cf50adb8b9a5f8c1919d2ec" - integrity sha512-7n/PGJOcL2QoptzL42L5xFFfXY5rFxLHnuz1foU+4ruUTG8x2IebGhtwVTpaDN8ShEv2UZObBlT1rrXTba15Zw== - -"@swc/core-linux-arm-gnueabihf@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.2.tgz#ab6d8535ab0294fb743044665c1c17330ccc2181" - integrity sha512-ZUQVCfRJ9wimuxkStRSlLwqX4TEDmv6/J+E6FicGkQ6ssLMWoKDy0cAo93HiWt/TWEee5vFhFaSQYzCuBEGO6A== - -"@swc/core-linux-arm64-gnu@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.2.tgz#c5db7bbba6af3bd93fd79b74850cf2fe04f1c074" - integrity sha512-GZh3pYBmfnpQ+JIg+TqLuz+pM+Mjsk5VOzi8nwKn/m+GvQBsxD5ectRtxuWUxMGNG8h0lMy4SnHRqdK3/iJl7A== - -"@swc/core-linux-arm64-musl@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.2.tgz#31cd61e6c83595248fda70a70e596f0a7f6cdf97" - integrity sha512-5av6VYZZeneiYIodwzGMlnyVakpuYZryGzFIbgu1XP8wVylZxduEzup4eP8atiMDFmIm+s4wn8GySJmYqeJC0A== - -"@swc/core-linux-x64-gnu@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.2.tgz#c857e95635fa2beaf6d3ecb9b1bd97ade5cda43a" - integrity sha512-1nO/UfdCLuT/uE/7oB3EZgTeZDCIa6nL72cFEpdegnqpJVNDI6Qb8U4g/4lfVPkmHq2lvxQ0L+n+JdgaZLhrRA== - -"@swc/core-linux-x64-musl@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.2.tgz#afa817865271f24502a0805cfab70ba553ade146" - integrity sha512-Ksfrb0Tx310kr+TLiUOvB/I80lyZ3lSOp6cM18zmNRT/92NB4mW8oX2Jo7K4eVEI2JWyaQUAFubDSha2Q+439A== - -"@swc/core-win32-arm64-msvc@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.2.tgz#5696added38837b6b3f442d63989ef4fcaa2d3de" - integrity sha512-IzUb5RlMUY0r1A9IuJrQ7Tbts1wWb73/zXVXT8VhewbHGoNlBKE0qUhKMED6Tv4wDF+pmbtUJmKXDthytAvLmg== - -"@swc/core-win32-ia32-msvc@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.2.tgz#3e42427998d49b54c55d49752b410309c7d02357" - integrity sha512-kCATEzuY2LP9AlbU2uScjcVhgnCAkRdu62vbce17Ro5kxEHxYWcugkveyBRS3AqZGtwAKYbMAuNloer9LS/hpw== - -"@swc/core-win32-x64-msvc@1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.2.tgz#fa6505e20a3753b6884b35353d1614a03c54df7f" - integrity sha512-iJaHeYCF4jTn7OEKSa3KRiuVFIVYts8jYjNmCdyz1u5g8HRyTDISD76r8+ljEOgm36oviRQvcXaw6LFp1m0yyA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" + integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== + +"@swc/core-darwin-arm64@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.8.tgz#f565a2744ee840389eba800f1bd454a5ab5c8235" + integrity sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg== + +"@swc/core-darwin-x64@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.8.tgz#52e1bb71fddca37d8c18dcfc33d4117e9de11789" + integrity sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ== + +"@swc/core-linux-arm-gnueabihf@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.8.tgz#19586971697767c465bbecaed96940e03a12ac5c" + integrity sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg== + +"@swc/core-linux-arm64-gnu@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.8.tgz#22a55b71cfff34cddd772619aa4ca2bf913032cb" + integrity sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q== + +"@swc/core-linux-arm64-musl@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.8.tgz#ce5a26ff25ab76fb699e7171b90884cfe63c1841" + integrity sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw== + +"@swc/core-linux-x64-gnu@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.8.tgz#cbacd43d4971fe6e4d41b8d8051ea1a8aabf40e5" + integrity sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ== + +"@swc/core-linux-x64-musl@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.8.tgz#6317cf3b75fde62c88faec3750e3aeb9bec83b3d" + integrity sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA== + +"@swc/core-win32-arm64-msvc@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.8.tgz#3a25a4d530e62be5b6b938b7eca70af117b34832" + integrity sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ== + +"@swc/core-win32-ia32-msvc@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.8.tgz#1c7a3ba04216ce3b0a00b4c742e8e3bff9ff8b14" + integrity sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ== + +"@swc/core-win32-x64-msvc@1.15.8": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.8.tgz#5bdcbe3fc0e0ccbae8abc9285a661a1bc3bdd65a" + integrity sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA== "@swc/core@^1.12.14": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.2.tgz#94c783f959fdc12c9d811b8345d791e9592a628a" - integrity sha512-OQm+yJdXxvSjqGeaWhP6Ia264ogifwAO7Q12uTDVYj/Ks4jBTI4JknlcjDRAXtRhqbWsfbZyK/5RtuIPyptk3w== + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.8.tgz#818abeab1cc57546a773b11dec4edd8ab26ae687" + integrity sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw== dependencies: "@swc/counter" "^0.1.3" "@swc/types" "^0.1.25" optionalDependencies: - "@swc/core-darwin-arm64" "1.15.2" - "@swc/core-darwin-x64" "1.15.2" - "@swc/core-linux-arm-gnueabihf" "1.15.2" - "@swc/core-linux-arm64-gnu" "1.15.2" - "@swc/core-linux-arm64-musl" "1.15.2" - "@swc/core-linux-x64-gnu" "1.15.2" - "@swc/core-linux-x64-musl" "1.15.2" - "@swc/core-win32-arm64-msvc" "1.15.2" - "@swc/core-win32-ia32-msvc" "1.15.2" - "@swc/core-win32-x64-msvc" "1.15.2" + "@swc/core-darwin-arm64" "1.15.8" + "@swc/core-darwin-x64" "1.15.8" + "@swc/core-linux-arm-gnueabihf" "1.15.8" + "@swc/core-linux-arm64-gnu" "1.15.8" + "@swc/core-linux-arm64-musl" "1.15.8" + "@swc/core-linux-x64-gnu" "1.15.8" + "@swc/core-linux-x64-musl" "1.15.8" + "@swc/core-win32-arm64-msvc" "1.15.8" + "@swc/core-win32-ia32-msvc" "1.15.8" + "@swc/core-win32-x64-msvc" "1.15.8" "@swc/counter@^0.1.3": version "0.1.3" @@ -2025,9 +2061,9 @@ integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/helpers@^0.5.0", "@swc/helpers@^0.5.11": - version "0.5.17" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" - integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== + version "0.5.18" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.18.tgz#feeeabea0d10106ee25aaf900165df911ab6d3b1" + integrity sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ== dependencies: tslib "^2.8.0" @@ -2039,21 +2075,21 @@ "@swc/counter" "^0.1.3" "@swc/wasm@^1.12.14": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@swc/wasm/-/wasm-1.15.2.tgz#883ab69263b65a10ca32c6b7b8f4feb21e4441c5" - integrity sha512-m9uPmG1M4uHCKN2hMKGWH+wy1S/ULoP8ojH967GIFPjSvxqm32rw7DGAIP0vBLc4UKBux9hJtTiwkgFqM79XhQ== + version "1.15.8" + resolved "https://registry.yarnpkg.com/@swc/wasm/-/wasm-1.15.8.tgz#8b8adc4a132db05cecc040901a9e0cb1c5bd661b" + integrity sha512-RG2BxGbbsjtddFCo1ghKH6A/BMXbY1eMBfpysV0lJMCpI4DZOjW1BNBnxvBt7YsYmlJtmy5UXIg9/4ekBTFFaQ== -"@tanstack/query-core@5.90.16": - version "5.90.16" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.90.16.tgz#19a972c2ffbc47727ab6649028af1bee70e28cdf" - integrity sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww== +"@tanstack/query-core@5.90.17": + version "5.90.17" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.90.17.tgz#e97c44cde35c341f2c8dd56f5f6621b4c50004a2" + integrity sha512-hDww+RyyYhjhUfoYQ4es6pbgxY7LNiPWxt4l1nJqhByjndxJ7HIjDxTBtfvMr5HwjYavMrd+ids5g4Rfev3lVQ== "@tanstack/react-query@^5.90.16": - version "5.90.16" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.90.16.tgz#76955d7027b5bff3d7f51163db7ea1c0bd430cb5" - integrity sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ== + version "5.90.17" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.90.17.tgz#509cc41ee1700b852866b477ee086fc3a4ed1e27" + integrity sha512-PGc2u9KLwohDUSchjW9MZqeDQJfJDON7y4W7REdNBgiFKxQy+Pf7eGjiFWEj5xPqKzAeHYdAb62IWI1a9UJyGQ== dependencies: - "@tanstack/query-core" "5.90.16" + "@tanstack/query-core" "5.90.17" "@trivago/prettier-plugin-sort-imports@^6.0.2": version "6.0.2" @@ -2074,30 +2110,30 @@ resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== -"@tufjs/models@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-4.0.0.tgz#91fa6608413bb2d593c87d8aaf8bfbf7f7a79cb8" - integrity sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ== +"@tufjs/models@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-4.1.0.tgz#494b39cf5e2f6855d80031246dd236d8086069b3" + integrity sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww== dependencies: "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.5" + minimatch "^10.1.1" "@turf/bbox-polygon@^7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/bbox-polygon/-/bbox-polygon-7.3.1.tgz#079e276c8cc903e8e867eb31cbbad2bdb5c0efc0" - integrity sha512-2NvwPfuRtwJk7w5HIC/Knei3mUXrVT+t/0FB1zStgDbakmXrqKISaftlIh4YTOVlUsVnvq0tggjFMLZ/Xxo+lQ== + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/bbox-polygon/-/bbox-polygon-7.3.2.tgz#6275525652aa1b3ac43a9d67e06295fd2b2ab36c" + integrity sha512-ofCbDrMlpqPbsRmXeCKfeKl3tV7q+6v/D3/zAx9C2flTFc6PoWPM05HPj5W+dDejpchm6p7MnNXmVR2k3Uw8sA== dependencies: - "@turf/helpers" "7.3.1" + "@turf/helpers" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" -"@turf/bbox@7.3.1", "@turf/bbox@^7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-7.3.1.tgz#145a5655bedb61be4f381601d3c622b70a5e8773" - integrity sha512-/IyMKoS7P9B0ch5PIlQ6gMfoE8gRr48+cSbzlyexvEjuDuaAV1VURjH1jAthS0ipFG8RrFxFJKnp7TLL1Skong== +"@turf/bbox@7.3.2", "@turf/bbox@^7.3.1": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-7.3.2.tgz#a200e6a87d34c726790792151a52abe3c0044066" + integrity sha512-iohGIDVqi8Ck7VQY2Emp490BShWKixG8wkVPQ7qO4fXRqJwrWO7ntU9XPB+r0qs6Y8kaSd+nDnvG3VFfKDb+Vg== dependencies: - "@turf/helpers" "7.3.1" - "@turf/meta" "7.3.1" + "@turf/helpers" "7.3.2" + "@turf/meta" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" @@ -2109,85 +2145,109 @@ "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" -"@turf/boolean-crosses@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/boolean-crosses/-/boolean-crosses-7.3.1.tgz#9c1d6766901d9ee68e61e4058da44ef5ec83e85a" - integrity sha512-Fn99AxTXQORiQjclUqUYQcA40oJJoJxMBFx/Vycd7v949Lnplt1qrUkBpbZNXQlvHF2gxrgirSfgBDaUnUJjzQ== - dependencies: - "@turf/boolean-point-in-polygon" "7.3.1" - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" - "@turf/line-intersect" "7.3.1" - "@turf/polygon-to-line" "7.3.1" +"@turf/boolean-crosses@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/boolean-crosses/-/boolean-crosses-7.3.2.tgz#400922339e847808d955e482282f1e94400975b1" + integrity sha512-qr2k+3YUnOoVI+9epznpTNE+pslr9nbjn/jGlq6uANhF4jviL5862E8SR4YHSrF0Vg2CguSPY8V4Lqo4qZhXQg== + dependencies: + "@turf/boolean-equal" "7.3.2" + "@turf/boolean-point-in-polygon" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" + "@turf/line-intersect" "7.3.2" + "@turf/polygon-to-line" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" -"@turf/boolean-disjoint@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/boolean-disjoint/-/boolean-disjoint-7.3.1.tgz#8f17412207c9f676f5769d3125876ef3b51f733d" - integrity sha512-bqVo+eAYaCq0lcr09zsZdWIAdv22UzGc/h2CCfaBwP5r4o/rFudNFLU9gb9BcM6dBUzrtTgBguShAZr7k3cGbw== - dependencies: - "@turf/boolean-point-in-polygon" "7.3.1" - "@turf/helpers" "7.3.1" - "@turf/line-intersect" "7.3.1" - "@turf/meta" "7.3.1" - "@turf/polygon-to-line" "7.3.1" +"@turf/boolean-disjoint@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/boolean-disjoint/-/boolean-disjoint-7.3.2.tgz#29f3cd8be55f8fee4cf01724a45bdc88d9063481" + integrity sha512-8cz3fAWldktvCEmIwMvzEq0q7JnICJPZeQ/xPm+XccGbRcGHQZOFI3wZCemQh6akRowWfQ8PgQu2OeJXJbvIuA== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/line-intersect" "7.3.2" + "@turf/meta" "7.3.2" + "@turf/polygon-to-line" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" -"@turf/boolean-overlap@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/boolean-overlap/-/boolean-overlap-7.3.1.tgz#e3397a0603bd78d9abb54beaf82ff852ce40d5fd" - integrity sha512-QhhsgCLzkwXIeZhaCmgE3H8yTANJGZatJ5IzQG3xnPTx7LiNAaa/ReN2/NroEv++8Yc0sr5Bkh6xWZOtew1dvQ== - dependencies: - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" - "@turf/line-intersect" "7.3.1" - "@turf/line-overlap" "7.3.1" - "@turf/meta" "7.3.1" +"@turf/boolean-equal@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/boolean-equal/-/boolean-equal-7.3.2.tgz#6df480cc754d57a5f3ad649faaf14553ee1e2831" + integrity sha512-ttve2ghdgkKHVI1gPwKj+XIyPirawhiUZKciLwIIaVgVrihiehpk4OY5Rn4kMWbvYzQTAKDUTfSXVM6fzQFeYA== + dependencies: + "@turf/clean-coords" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" "@types/geojson" "^7946.0.10" geojson-equality-ts "^1.0.2" tslib "^2.8.1" -"@turf/boolean-point-in-polygon@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.1.tgz#0ea4462476ab1ec270c378a69353afe4a63f83d5" - integrity sha512-BUPW63vE43LctwkgannjmEFTX1KFR/18SS7WzFahJWK1ZoP0s1jrfxGX+pi0BH/3Dd9mA71hkGKDDnj1Ndcz0g== +"@turf/boolean-overlap@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/boolean-overlap/-/boolean-overlap-7.3.2.tgz#70e356da308b23e72c3803edaa6487d07987561f" + integrity sha512-xzy/wpf2OpIhyZ80aWU9UtT87w7iQtAPOCyb5szfBcX2L+m4Ii5pVx53yZbKFct16i/zObc4W6gI9N5oHyOBkg== + dependencies: + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" + "@turf/line-intersect" "7.3.2" + "@turf/line-overlap" "7.3.2" + "@turf/meta" "7.3.2" + "@types/geojson" "^7946.0.10" + geojson-equality-ts "^1.0.2" + tslib "^2.8.1" + +"@turf/boolean-point-in-polygon@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.2.tgz#ca09ade9fea9f70c85d759ad751e6f2d0fcd46e3" + integrity sha512-PAfPDQ0TW1+VLgZ7tReTSyZ/X41AW7/nMRQxVpY+h/aG7JomZJ779lojnODT4dWCn3IMTA3xD2dDDfVYBAQMYg== dependencies: - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" "@types/geojson" "^7946.0.10" point-in-polygon-hao "^1.1.0" tslib "^2.8.1" -"@turf/boolean-point-on-line@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/boolean-point-on-line/-/boolean-point-on-line-7.3.1.tgz#6742d720848ce117f48956bbaec1cfdbe6a765b2" - integrity sha512-8Hywuv7XFpSc8nfH0BJBtt+XTcJ7OjfjpX2Sz+ty8gyiY/2nCLLqq6amu3ebr67ruqZTDpPNQoGGUbUePjF3rA== +"@turf/boolean-point-on-line@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/boolean-point-on-line/-/boolean-point-on-line-7.3.2.tgz#242386c2f278d58b8e7b0331f88c58aa27e0c60e" + integrity sha512-1hDfbdBgX9qpMmCnBqeNgRC3Bl/hlNGR42SvGmejXCjaZmheP+V8pXWJgF0WDxAzYkb7opqS8Vta4+EymUU5GQ== dependencies: - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" "@turf/boolean-valid@^7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/boolean-valid/-/boolean-valid-7.3.1.tgz#6db11f99d6f32916334845e2ead62f9afb243335" - integrity sha512-lpw4J5HaV4Tv033s2j/i6QHt6Zx/8Lc90DTfOU0axgRSrs127kbKNJsmDEGvtmV7YjNp8aPbIG1wwAX9wg/dMA== - dependencies: - "@turf/bbox" "7.3.1" - "@turf/boolean-crosses" "7.3.1" - "@turf/boolean-disjoint" "7.3.1" - "@turf/boolean-overlap" "7.3.1" - "@turf/boolean-point-in-polygon" "7.3.1" - "@turf/boolean-point-on-line" "7.3.1" - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" - "@turf/line-intersect" "7.3.1" + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/boolean-valid/-/boolean-valid-7.3.2.tgz#b8ba8ee87a128a44f965d7509aa5e3efd5efa3d6" + integrity sha512-0QYO49YM1CJufjR1p58zHffiNUzEEwz7WQJu/a0kzQBQNm5+sYVdyL/PiFuDoEr34WdsAGjSFvFS8h5PB3IG1A== + dependencies: + "@turf/bbox" "7.3.2" + "@turf/boolean-crosses" "7.3.2" + "@turf/boolean-disjoint" "7.3.2" + "@turf/boolean-overlap" "7.3.2" + "@turf/boolean-point-in-polygon" "7.3.2" + "@turf/boolean-point-on-line" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" + "@turf/line-intersect" "7.3.2" "@types/geojson" "^7946.0.10" geojson-polygon-self-intersections "^1.2.1" tslib "^2.8.1" +"@turf/clean-coords@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/clean-coords/-/clean-coords-7.3.2.tgz#e380aea4cd215e53f0faac61b375501ddd1b7af6" + integrity sha512-O7gnwgUkFbvjnCmq4dyECkYshcXZNqP8pE+DQNC26xG86+qeBlrPU8DjR7aumcK8MezC9tYqw0vb350/sKYBVQ== + dependencies: + "@turf/boolean-point-on-line" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + "@turf/clone@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/clone/-/clone-5.1.5.tgz#253e8d35477181976e33adfab50a0f02a7f0e367" @@ -2195,31 +2255,32 @@ dependencies: "@turf/helpers" "^5.1.5" -"@turf/distance@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-7.3.1.tgz#165d868c31eed69f6e9dc6e4ea292b9ae498546c" - integrity sha512-DK//doTGgYYjBkcWUywAe7wbZYcdP97hdEJ6rXYVYRoULwGGR3lhY96GNjozg6gaW9q2eSNYnZLpcL5iFVHqgw== +"@turf/distance@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-7.3.2.tgz#5cb70f5f5b24af2216f088be05be27b35f161f95" + integrity sha512-aY2HQDZpu/doKRUTEcBKdV2olNOD1x0wKR6ujzC+D1EZLKWOEmTJRR+6OjzB+xuv5zZbhFPe9f0MXEuNDxzwfQ== dependencies: - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" -"@turf/geojson-rbush@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/geojson-rbush/-/geojson-rbush-7.3.1.tgz#d6ea9f6c0219575d864b163eb3a0dee9fcaf49a9" - integrity sha512-EsrBBftZS5TvzRP2opLzwfnPXfmJi45KkGUcKSSFD0bxQe3BQUSmBrZbHMT8avB2s/XHrS/MniqsyeVOMwc35Q== +"@turf/geojson-rbush@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/geojson-rbush/-/geojson-rbush-7.3.2.tgz#066841098ea3b02118805c8d3de8fdd003d8f6e2" + integrity sha512-0cUSyLotPClSzPvD7XM88qlaRMkfZJJuwUE/p8rhpvGk53SjVexMjltohkOFd0QFmayCovrT81OSgGcqt91zYA== dependencies: - "@turf/bbox" "7.3.1" - "@turf/helpers" "7.3.1" - "@turf/meta" "7.3.1" + "@turf/bbox" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/meta" "7.3.2" "@types/geojson" "^7946.0.10" rbush "^3.0.1" + tslib "^2.8.1" -"@turf/helpers@7.3.1", "@turf/helpers@^7.2.0": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-7.3.1.tgz#2f0e666ecdefbf75d0df1b94ea1f5ccc6e4abc5b" - integrity sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg== +"@turf/helpers@7.3.2", "@turf/helpers@^7.2.0": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-7.3.2.tgz#deb2a1a5bb84d8db78571bc89ca8b75586e31ed7" + integrity sha512-5HFN42rgWjSobdTMxbuq+ZdXPcqp1IbMgFYULTLCplEQM3dXhsyRFe7DCss4Eiw12iW3q6Z5UeTNVfITsE5lgA== dependencies: "@types/geojson" "^7946.0.10" tslib "^2.8.1" @@ -2229,12 +2290,12 @@ resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-5.1.5.tgz#153405227ab933d004a5bb9641a9ed999fcbe0cf" integrity sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw== -"@turf/invariant@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-7.3.1.tgz#9b0bb8f74af870f0b10a2e9285e62f4983f99ac2" - integrity sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA== +"@turf/invariant@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-7.3.2.tgz#490ea975572a7dfebed5ce0dd20a7dd8d0517602" + integrity sha512-brGmL1EFhZH/YNXhq6S+8sPWBEnmvEyxMWJO8bUNOFZyWHYiRTwxQHZM+An1blkbQ77PiEzsdNAspZqE1j7YKA== dependencies: - "@turf/helpers" "7.3.1" + "@turf/helpers" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" @@ -2245,50 +2306,51 @@ dependencies: "@turf/helpers" "^5.1.5" -"@turf/line-intersect@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-7.3.1.tgz#e1da69dcd747d6fee6c58d1f2e45f009df2cad5c" - integrity sha512-HFPH4Hi+rG7XZ5rijkYL5C9JGVKd6gz6TToShVfqOt/qgGY9/bLYQxymgum/MG7sRhIa8xcKff2d57JrIVuSWA== +"@turf/line-intersect@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-7.3.2.tgz#8a5448124f9ae2c154de0beed7dfd23269c1b956" + integrity sha512-qsMUml7MI/x1iLcQzCuD/LlAxQUfMDR6PoVwQ32fGF7dCqfdMkKWoMz4Qn5WyPCeSyW8BchuAjWp5FnVtOeLeg== dependencies: - "@turf/helpers" "7.3.1" + "@turf/helpers" "7.3.2" "@types/geojson" "^7946.0.10" sweepline-intersections "^1.5.0" tslib "^2.8.1" -"@turf/line-overlap@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/line-overlap/-/line-overlap-7.3.1.tgz#4134e22c097a3a7d0169c5b18df5a6ade8d21472" - integrity sha512-xIhTfPhJMwz57DvM+/JuzG2BUL/gR/pJfH6w+vofI3akej33LTR8b296h2dhcJjDixxprVVH062AD1Q3AGKyfg== - dependencies: - "@turf/boolean-point-on-line" "7.3.1" - "@turf/geojson-rbush" "7.3.1" - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" - "@turf/line-segment" "7.3.1" - "@turf/meta" "7.3.1" - "@turf/nearest-point-on-line" "7.3.1" +"@turf/line-overlap@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/line-overlap/-/line-overlap-7.3.2.tgz#e6b3fbef446bc4346dab4b358084a2cc4ab7fd51" + integrity sha512-oao5Zbs21bX5prTrxdjgjYEc9bBfBDv4dkRqDaFk1pzNyx9zD2uXlifaPaSjo/GFJ5OEfTews8r3nSUXzFN+yA== + dependencies: + "@turf/boolean-point-on-line" "7.3.2" + "@turf/geojson-rbush" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" + "@turf/line-segment" "7.3.2" + "@turf/meta" "7.3.2" + "@turf/nearest-point-on-line" "7.3.2" "@types/geojson" "^7946.0.10" fast-deep-equal "^3.1.3" tslib "^2.8.1" -"@turf/line-segment@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-7.3.1.tgz#1a7e4cc67578b46f9b3261cfe38bc99872b6b559" - integrity sha512-hHz1fM2LigNKmnhyHDXtbRrkBqltH/lYEvhgSmv3laZ9PsEYL8jvA3o7+IhLM9B4KPa8N6VGim6ZR5YA5bhLvQ== +"@turf/line-segment@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-7.3.2.tgz#27a288620b220d98ca9b8105b521eaf4b36b67b5" + integrity sha512-Dx1yQ31fMm3PqYWo5S/5/zlcMaCV02G2alW5FSnJCu9Yc1/sBMxjjuVpF92roOV+XRE9zl50DThATikQB8+roA== dependencies: - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" - "@turf/meta" "7.3.1" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" + "@turf/meta" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" -"@turf/meta@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-7.3.1.tgz#af2076f6388ea87585190c99b8530cbb05e38944" - integrity sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ== +"@turf/meta@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-7.3.2.tgz#e31320bf0602692664291b827eb6eb7344430a45" + integrity sha512-FIcIY+ZsAe9QV4fHciTXeuRz2TKIVaEjivkl4vMFCibdj7FUkWDofqOncbIre1xPrgktQeh20ZrmD+p0kf3n4Q== dependencies: - "@turf/helpers" "7.3.1" + "@turf/helpers" "7.3.2" "@types/geojson" "^7946.0.10" + tslib "^2.8.1" "@turf/meta@^5.1.5": version "5.2.0" @@ -2297,25 +2359,25 @@ dependencies: "@turf/helpers" "^5.1.5" -"@turf/nearest-point-on-line@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-7.3.1.tgz#f8f45aed81ee6fc79529815a5aa97f49a06e7d18" - integrity sha512-FialyHfXXZWLayKQcUtdOtKv3ulOQ9FSI45kSmkDl8b96+VFWHX983Pc94tTrSTSg89+XX7MDr6gRl0yowmF4Q== +"@turf/nearest-point-on-line@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-7.3.2.tgz#722d78ef58d0c8fa673600fbff4c326959079289" + integrity sha512-IfI7SkasMLdULb+gPOtdZtTSTkuS06dlKEUX4lPOC94jJA2vjaCDIRxejRRzGLY0EQ4uben9I8PQEp7cwVuERA== dependencies: - "@turf/distance" "7.3.1" - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" - "@turf/meta" "7.3.1" + "@turf/distance" "7.3.2" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" + "@turf/meta" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" -"@turf/polygon-to-line@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@turf/polygon-to-line/-/polygon-to-line-7.3.1.tgz#42fce39041690245925a2c474b4d9cfd19c8e5d5" - integrity sha512-qTOFzn7SLQ0TcKBsPFAFYz7iiq34ijqinpjyr9fHQlFHRHeWzUXiWyIn5a2uOHazkdhHCEXNX8JPkt6hjdZ/fQ== +"@turf/polygon-to-line@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@turf/polygon-to-line/-/polygon-to-line-7.3.2.tgz#5932753a7b5f28a80906f73f7627379c62bfecae" + integrity sha512-/C8On+ddnMi1z2r5ZLbGyXb+gCM4d4CpAKx3f80kyReM2IxwN6F0t6y1PPXYx4eR2P49fhiEcQJ9m0kCwQBAzw== dependencies: - "@turf/helpers" "7.3.1" - "@turf/invariant" "7.3.1" + "@turf/helpers" "7.3.2" + "@turf/invariant" "7.3.2" "@types/geojson" "^7946.0.10" tslib "^2.8.1" @@ -2456,7 +2518,7 @@ resolved "https://registry.yarnpkg.com/@types/google.maps/-/google.maps-3.58.1.tgz#71ce3dec44de1452f56641d2c87c7dd8ea964b4d" integrity sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ== -"@types/hast@^3.0.0": +"@types/hast@^3.0.0", "@types/hast@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== @@ -2480,20 +2542,27 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== -"@types/node@*", "@types/node@^24.0.3": - version "24.10.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.2.tgz#82a57476a19647d8f2c7750d0924788245e39b26" - integrity sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA== +"@types/node@*": + version "25.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.8.tgz#e54e00f94fe1db2497b3e42d292b8376a2678c8d" + integrity sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg== dependencies: undici-types "~7.16.0" "@types/node@^20.13.0": - version "20.19.25" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.25.tgz#467da94a2fd966b57cc39c357247d68047611190" - integrity sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ== + version "20.19.29" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.29.tgz#49e9857d3e3f3220508d37904eb47cb3434d5b17" + integrity sha512-YrT9ArrGaHForBaCNwFjoqJWmn8G1Pr7+BH/vwyLHciA9qT/wSiuOhxGCT50JA5xLvFBd6PIiGkE3afxcPE1nw== dependencies: undici-types "~6.21.0" +"@types/node@^24.0.3": + version "24.10.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.8.tgz#9b529d32e7e5adb74b13d1fc9b83615e9a12a701" + integrity sha512-r0bBaXu5Swb05doFYO2kTWHMovJnNVbCsII0fhesM8bNRlLhXIuckley4a2DaD+vOdmm5G+zGkQZAPZsF80+YQ== + dependencies: + undici-types "~7.16.0" + "@types/normalize-package-data@^2.4.3", "@types/normalize-package-data@^2.4.4": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" @@ -2749,747 +2818,759 @@ "@vitest/pretty-format" "4.0.17" tinyrainbow "^3.0.3" -"@zag-js/accordion@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/accordion/-/accordion-1.29.1.tgz#ab78fc6283ab58feea6c66bcdc34d88bdd989013" - integrity sha512-3laCyoAsInYPooQU5+tgwxiejU25M20etHbbZ6FIql8VRhKemYakpLaVdcXoFQXpwnnsVfyRv88fHYse+eR8vQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/anatomy@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/anatomy/-/anatomy-1.29.1.tgz#ea6ae6f0effa47c17c6043402ea85bbefe109fc4" - integrity sha512-Yq2E/32mwh4MxQ5jeP3NlweoqsO6Q2UFawyrCwyzbOUovbcoC74H4/2i/qjVlhpfEuVRRWDiqn31z/OWc4w3dw== - -"@zag-js/angle-slider@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/angle-slider/-/angle-slider-1.29.1.tgz#2956eabb156ef2d681206452a4b4115a04e66ef8" - integrity sha512-U+6ihVRiFSFodJSbJXTxsyH697bvmYoGLRjo7w14B2WBumbKxa/tXXPuUZdS5MBfJHKo1XUwX1HKQpBmSX8WWA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/rect-utils" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/aria-hidden@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/aria-hidden/-/aria-hidden-1.29.1.tgz#05114b3cf0856d1299ac22dd5bf3878549dcdb6f" - integrity sha512-Q8JRvyOjEplKv4xjrJvHvvaGCc/8wa29B7vxck1QBcLqtzSxI003WeFg7fYf4J9NxQmKuFx9iwoh/iD4JmLIbw== - dependencies: - "@zag-js/dom-query" "1.29.1" - -"@zag-js/async-list@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/async-list/-/async-list-1.29.1.tgz#96f203baf46e424f1818c4e7eed671578c3f1478" - integrity sha512-0PVllpwxt9ZT8wSwQiARq4eLj7SKJg2y5TwczgytV89TUezQLYYnLW5K7A8+3YxDDbsEsN5qArdAoZ8azkvkhA== - dependencies: - "@zag-js/core" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/auto-resize@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/auto-resize/-/auto-resize-1.29.1.tgz#faaa316b45b9a217f5aa779d52eee4f8ca19ffa5" - integrity sha512-ZAUqd3Mj9J9/SoeAJw9QtWAQgyf/66I2mXfVBIQK5VpgeDzOZ+J75zOaKr1h0abVlvi001+fFBMDj7N8MmqgTA== - dependencies: - "@zag-js/dom-query" "1.29.1" - -"@zag-js/avatar@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/avatar/-/avatar-1.29.1.tgz#f28d95608e7dcd88f03523931421c86a54d10bac" - integrity sha512-dkL6kk4Q4BvhJ6gDF+lb6rpmLkbFahFbXHyekDWQ003Ud+uW+MR3jIqIPuNnrKeGxts8Cl5q7ieI3sCneTWXyg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/bottom-sheet@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/bottom-sheet/-/bottom-sheet-1.29.1.tgz#eb257b0636ccebd57ab4184a1433aa83d39d13bf" - integrity sha512-LaXGuu9jw1k5+/sWHk9XWcusykTVDT00fqRRmeVIL32BrgZF0o4286QvUWZrW3vyOLT4nJZVBIsuSz/4nSEqSw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/aria-hidden" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-trap" "1.29.1" - "@zag-js/remove-scroll" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/carousel@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/carousel/-/carousel-1.29.1.tgz#c4b541e8542537ebba59eac0b0d12941235c540f" - integrity sha512-Duyt9pTOWqoTX++XOfoZCsdb5MsPOybnQ0DQZz61jApsyKwd9C6I361az3nkTm7uMgq2T1/pk5Zd3YgBQLxjGg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/scroll-snap" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/checkbox@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/checkbox/-/checkbox-1.29.1.tgz#240a0e0e66e88cd103f7695f29d16591bc0650ff" - integrity sha512-+dWWLRzOVzuIdJ3BkO6zi525umeKx1/tlq3WnRR5ok5bGN/zSYWWUFl/bctWlTCuLO9sMpraHEnHZzYnjJoY/A== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-visible" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/clipboard@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/clipboard/-/clipboard-1.29.1.tgz#73f2a8315d7a74c19f17908ec8a85c4b97e7f78d" - integrity sha512-oYIokwwgOr6a4v33l+AS2pao9yxDpwESu/p3oRbO2fNVPrbUVLj3b4pct+UJt2sR+CWAHl1d4QRI+DLmG2ybPQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/collapsible@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/collapsible/-/collapsible-1.29.1.tgz#3653507dcf5d8a496e543aa742a496fcd1c27102" - integrity sha512-g7iIMLHHYVnR729jZ7ZeQsldvpFcSUOeNAFyeFYhsWdAl+NoRhlNkeH5sAFxIT115s2FKJOOWEbPeu8xgVSgNg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/collection@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/collection/-/collection-1.29.1.tgz#b3f4f6fb1e5a182cf9eb59c06e7b895923e85621" - integrity sha512-Yz1ElOm56as/IRRh9lW2eTndHeHBaxVNjS0cGTWFmrSOTdjY4+ilTcHTv3FtyUw5sZurChEgKmFs7oUbHm7RaA== - dependencies: - "@zag-js/utils" "1.29.1" - -"@zag-js/color-picker@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/color-picker/-/color-picker-1.29.1.tgz#1c2aab1c2a5c2bdcc2deaba150b25717937ee805" - integrity sha512-hxEt2fM0o8t2lw+Lt8qIGFEk0v5u/kc+MkF0RpBACtRjN7+xZ4pm6WOe6a1cW1NUa+VbHlKXfalst+hnEYML2A== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/color-utils" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/color-utils@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/color-utils/-/color-utils-1.29.1.tgz#62e36d5d19fb353ccdbd18298bd5484c4048e9c4" - integrity sha512-FZCvvjzyA2vkbX9ifv6xF+oL7M2vNmFEAgWpVDy9O671ofEvb/yryjxHBpK3wcTMcJwbFORC5hsDMbX2Tw5MTg== - dependencies: - "@zag-js/utils" "1.29.1" - -"@zag-js/combobox@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/combobox/-/combobox-1.29.1.tgz#b59e2483ecec498f7f73c78ebeacf2dd4b7b1fa1" - integrity sha512-7w5XFjjk/kp/8kDbPe3rw4G/zTAKtH4H6e7xvl6Bo5kpEJw/aq7yt05o8tAa2WNqT+491aXiQePYqr5PkPpGgQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/aria-hidden" "1.29.1" - "@zag-js/collection" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/core@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/core/-/core-1.29.1.tgz#ac0a1deb2764c62a45726ffe9775ede3020653bf" - integrity sha512-5Qw3VbLo+jqqyXrUon/LIqJT/+SGHwx5sI1/qseOZBqYj46oabM/WiEoRztFq+FDJuL9VeHnVD6WB683Si5qwg== - dependencies: - "@zag-js/dom-query" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/date-picker@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/date-picker/-/date-picker-1.29.1.tgz#60d6dc8b7139f3b690bc88e844ef61b68e4954aa" - integrity sha512-uus+kuZ+dEHfGYr3QukIkVzYB/skh2EWnlDk/3hOAEw8KSzi3GQzpRIJFfGWaVoFBGvXvLRf8Vj/4ufrfLSsoQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/date-utils" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/live-region" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/date-utils@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/date-utils/-/date-utils-1.29.1.tgz#9db6f4c7ce3bc75eab333f8225a17a77a27abe09" - integrity sha512-NLEMNs2tRxRoJsobqajwAb+zuhx69MuA1UA1SxJAoauM6p8MulX8bJ4aqd3ZDPKlkGQbXu6e62fuTRkbjJDRXw== - -"@zag-js/dialog@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/dialog/-/dialog-1.29.1.tgz#9b6662f4048f599e4c3db949427bc9285be95692" - integrity sha512-fDNgeXqpY576L/PtRQn08XscY1nrL4jBvpw9JGq/w/PWeicM7K+kM9gnoEBz5MB7W+bMR+11AJXz/iKGE1GBzA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/aria-hidden" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-trap" "1.29.1" - "@zag-js/remove-scroll" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/dismissable@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/dismissable/-/dismissable-1.29.1.tgz#0e2d1c9c9b5ff00b5c2e894106f028c7e17ae15c" - integrity sha512-4EsVsPudQ17KaInrLQdeZyU8apjzXinfPjgSNBR7CPMU60O0J/zV9mXbn4lwXEE5Hy35lXq8s4V+W6wD0CwbLg== - dependencies: - "@zag-js/dom-query" "1.29.1" - "@zag-js/interact-outside" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/dom-query@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/dom-query/-/dom-query-1.29.1.tgz#49d2444e79c82f751e47912bb865517b80a58e79" - integrity sha512-GGN+Kt/+J9eiPeEqU+PsRYoNoRdFTNYP2ENCCaBSeypCsaxaG4wo99nbsoBwJwhr/c8zeUmULErgrGGoSh0F1Q== - dependencies: - "@zag-js/types" "1.29.1" - -"@zag-js/editable@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/editable/-/editable-1.29.1.tgz#3625e7edae9b8c9544fb6033601002de6049fe2c" - integrity sha512-NpZNRF0cF1AA9OHQpIpU4Jlo4hSPomZ5FpMWmVX4kXbo49YywkPfSDgFCdcsGUIyTLXCmfirI9PWRP4B2IxlVw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/interact-outside" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/file-upload@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/file-upload/-/file-upload-1.29.1.tgz#9f740113e57baac1cf15a28e73a0bf1ba457cba6" - integrity sha512-n321mbdiE6yeUvfDr6sTKxQMJz/BHDvYJvyCaO+MirXdrD80iSop7u4/caekqBFcerxtXg4FcjpPl1fvCGHr+w== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/file-utils" "1.29.1" - "@zag-js/i18n-utils" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/file-utils@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/file-utils/-/file-utils-1.29.1.tgz#089ed69fe9095d8b6b37fc4b881141bcc13cb435" - integrity sha512-nS6549/SkqFldlheXWSMiT+4NMVyB9PMg1DII36JANjgfoceVN/jBM21a6u7CssdpNnSYwqnD4Ozjeqkb3ZO5Q== - dependencies: - "@zag-js/i18n-utils" "1.29.1" - -"@zag-js/floating-panel@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/floating-panel/-/floating-panel-1.29.1.tgz#7111f0430d203342cf906c0fa4f2e3123e9d2ae8" - integrity sha512-fcUKp0NfbTijU8FyA9BI3qNM/YlwFuuS8ixghiaweT/GlbJF9YUlyWzLXKE24I3rE+o0ykq53NEHdQGTco/2hg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/rect-utils" "1.29.1" - "@zag-js/store" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/focus-trap@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/focus-trap/-/focus-trap-1.29.1.tgz#aa56392e35e7d76acededc0e19ae45b0afe79990" - integrity sha512-dDp/nuptTp1OJbEjSkLPNy6DxOSfYHKX292uvBV80xyLZUQ4s38wi8VCOuywpgF607WYIRozHI5PB8kaoz0sWA== - dependencies: - "@zag-js/dom-query" "1.29.1" - -"@zag-js/focus-visible@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/focus-visible/-/focus-visible-1.29.1.tgz#be1abe981b90c93003fc24df80d3efe3ac9282b5" - integrity sha512-3zkxNQ0Gx8Xp45y7tfwqZZfJWLYwZhf9rEeMJT49InR9egWqtHCw/RjOQGR/2vydrPv7mfa14ikY/Gql2AX4TQ== - dependencies: - "@zag-js/dom-query" "1.29.1" - -"@zag-js/highlight-word@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/highlight-word/-/highlight-word-1.29.1.tgz#021f6899a5a99f920191f7d4417f152bcf3cef20" - integrity sha512-54FVVE4NlixIzUTpaJvR7O+fNg9jJomWr3F3LoOkgaKJYuRxitHp1hLmSsdjxRkusMs+1qNHsYN4E9lWNv7kow== - -"@zag-js/hover-card@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/hover-card/-/hover-card-1.29.1.tgz#42fc55b4fc98a761466af83265d53e286d9e5bbc" - integrity sha512-neKWMHaxL5yIno2BrbhUPm1zQD1o0+ydoYNoUucFDxexZQwcrjORwsgeBfYP6cle6Ne0Aw6OsSE4xowR9LEZVA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/i18n-utils@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/i18n-utils/-/i18n-utils-1.29.1.tgz#11a03ae7d618a4655e66c219e1a2eaf1c8adb87f" - integrity sha512-c1N5evLLkQpGizPZ8HSek14gaOJgRr7/vlXwWlaC1aSaGrRjZmi/YMmuTThCP4nja/6zKPNg9NJMbuwi/o3UTw== - dependencies: - "@zag-js/dom-query" "1.29.1" - -"@zag-js/image-cropper@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/image-cropper/-/image-cropper-1.29.1.tgz#9ae36ee2ae7ca92095d3e4d8d727f664283dd271" - integrity sha512-Xgwt/GwGZ8dT4fM/CRrSZhBhDIWdJiBlsCxp2vz1d9v/6Wju2uVtcM8iaeKUjKZ2NXsnEXTi6/gexlqyeuRjTQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/interact-outside@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/interact-outside/-/interact-outside-1.29.1.tgz#36255e862af902d7077b5b45edb3bc1a0e248628" - integrity sha512-hqZYr+OcnW+egU8W297pVK+6YMa+HOyFA0GHF45+29cB+mmTnMPTRcrdqNDFKA+f+ABQl3RH32E1WZjkluJc6A== - dependencies: - "@zag-js/dom-query" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/json-tree-utils@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/json-tree-utils/-/json-tree-utils-1.29.1.tgz#03312ad79f623a690e17f6a8622423c5dea68812" - integrity sha512-SKHXFDh92iFUaU/pIgL3j03L/OJMvF+ZiUVY9bitHdBxHE9aJX4ZjdjArYnQIUX3KIFhb4hkyfuW3mxLtvTfGA== - -"@zag-js/listbox@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/listbox/-/listbox-1.29.1.tgz#85856bf9dcfd840db1789a7337832f4be4acc1ee" - integrity sha512-UShb0caYtLshSHIwnVWz9QOvzm6WDb5+uogNHObt+6ALk77TZfKDxl29jmQ6/14H9ErYHLVsA6akschIaBswUg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/collection" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-visible" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/live-region@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/live-region/-/live-region-1.29.1.tgz#96e1ba2ed076a71b073d9bae298061c41443d572" - integrity sha512-6+e5BQdzj/nuIK4Uxr3Tv5tKR9X3wP8DbLZPhAVF78XYPamuO19NhRjV4ph6Sp3Jme9gjP8BbaPGyXN4D6lDhA== - -"@zag-js/marquee@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/marquee/-/marquee-1.29.1.tgz#0c55e9dc1d24b29794c5adb3b97eb4cb00624081" - integrity sha512-dGyQCPHvwhzVxGKyugqMzvhA5/1d8PS+OoNPxDo1ozKrvNvcsEtDG6lsNMy+jolllthw+m87pcqhA1AHZvpe9Q== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/menu@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/menu/-/menu-1.29.1.tgz#9d30c69afd53683a077b6874b15c95f7905ca51a" - integrity sha512-+L/J+nHlw0N3vwDqGFm7KAu3sbC0l4OVPziTjInlvrliwFbmMX86g17sVKvD/Ke/yc3YvTtJt48AAhidK1EWtA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/rect-utils" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/number-input@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/number-input/-/number-input-1.29.1.tgz#9d8ff258b5652131c38d421a926178c52102baea" - integrity sha512-tme/FOl+jdPy0lYiKo60XdIYheAmfNXPvGb2W4SQtPO2YT3mESdPC/TpCCOVvgIY93k5+5aa8MLEX6GJsTjL+A== +"@zag-js/accordion@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/accordion/-/accordion-1.31.1.tgz#ea16303036696bb49cf528b131e4bbe3c54437fc" + integrity sha512-3sGi4EZpGBz/O1IVkk9dzzWzP5vVVOj4Li6C+jHOnrgaWPouA/mBTP5L9HEL8qtFsECFZwpNo486eqiCmeHoGw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/anatomy@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/anatomy/-/anatomy-1.31.1.tgz#415564763b6e6b2f77ff3c2dac9c8683531bc5d3" + integrity sha512-BhIhf3Q0tRA0Jugd7AJfUBzeAb/iATBsw7KyYThMGcPWmrWssL7KWr5AB6RufzGKU7+DCb1QEhlqd4NSOJaYxQ== + +"@zag-js/angle-slider@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/angle-slider/-/angle-slider-1.31.1.tgz#fba6c241868ac8de3ee2318e9ac9a893dfb771c5" + integrity sha512-SfWrgnM0zMLX82rsIJOqWk430UnPA17UFGcDqMDRwXy1Wx4yptmx0aFAsSXnRnw4Ee7WaulF2RWBli6O6iYRCA== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/rect-utils" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/aria-hidden@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/aria-hidden/-/aria-hidden-1.31.1.tgz#5dfb1e9702a02f0964684ebace3592e935cf756c" + integrity sha512-SoNt4S2LkHNWPglQczWN0E5vAV15MT1GoK9MksZzbkMhl+pkDTdLytpXsQ1IgalC1YUng0XNps/Wt6P3uDuzTA== + dependencies: + "@zag-js/dom-query" "1.31.1" + +"@zag-js/async-list@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/async-list/-/async-list-1.31.1.tgz#db46419798d856a85a3de9b4907e502ba181cfd5" + integrity sha512-BDZEmr4KKh3JASgkXouOwoTWRS1UPE3gdZYZ7Sk7SJ1i8+Pk6zUQ4FnxaoF/cSAdCXyjSSr92Kns2bTk/QuNkQ== + dependencies: + "@zag-js/core" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/auto-resize@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/auto-resize/-/auto-resize-1.31.1.tgz#882d6313b71b6546b905aa718b6aa6e7b4ff46e4" + integrity sha512-qzWHibjBekSmFweG+EWY8g0lRzKtok7o9XtQ+JFlOu3s6x4D02z2YDzjDdfSLmS7j0NxISnwQkinWiDAZEYHog== + dependencies: + "@zag-js/dom-query" "1.31.1" + +"@zag-js/avatar@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/avatar/-/avatar-1.31.1.tgz#31f103b0984bc1e0b03704d14cbfd145fc9a4f38" + integrity sha512-Grosi2hRn4wfDYlPd8l+d4GCIFMsoj6ZFqii+1k14AqTDiCUJ/J0jCvOrRHkvkpEqektjuSD7e/GCX+yawqkuQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/bottom-sheet@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/bottom-sheet/-/bottom-sheet-1.31.1.tgz#9fe9b295bff3661b0a32a758df6d9c1be2f218c5" + integrity sha512-ZBbIpYyZX2zQeqW36aODVi9/I4J3zS1XmIHUjeXmfmf6TlQUA1ydgYl7ipREfmCzNWX2LEA5ZnPJQw0UBcrB8w== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/aria-hidden" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-trap" "1.31.1" + "@zag-js/remove-scroll" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/carousel@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/carousel/-/carousel-1.31.1.tgz#4cf83807ae28b14b94947471bf260ccbe3855685" + integrity sha512-228Ol86G/lg8crcomy5cALkUYdOHCHcvJnSOQzeUj80JNjlELzrjBpaAj4lx8dZocfwou2Sg4NyZJ+mISSc+Dg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/scroll-snap" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/checkbox@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/checkbox/-/checkbox-1.31.1.tgz#6547280b733b14c97cfb1da2d253f9dae91a8374" + integrity sha512-oLS8bqhimckLl6coCNmKPPUmB8wIbVhtkpLwLPLgz4vhhUe7gnpB5dea14Ow2JTBnmug8bMh/bJDtuPa9qQuTw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-visible" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/clipboard@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/clipboard/-/clipboard-1.31.1.tgz#6f1803ec184440d61ca280dd6f21539f24d2ddc0" + integrity sha512-pv/gOmD9DMg+YmSMjahyd5oSp7/v9K0uQ3att6fPeaNMjB42b3tnY1S1GNVy5Ltf/qHDab6WVwlEN+1zKHXaYw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/collapsible@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/collapsible/-/collapsible-1.31.1.tgz#46082b9827d1d5893d46bdb71c396e7d8defae2a" + integrity sha512-eCC5G6bBZUwF8z2XULQXUNRxqte9I2Sv+WJ2brycPn1a68uYD76RzFBmLQ2er95VbshUdeo8nRuX8MooAFuYzg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/collection@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/collection/-/collection-1.31.1.tgz#26724e1ffa359097f1f2836f9d66a95b56bd45ff" + integrity sha512-ecpfyfCj8Y0/GUPuHYsLxexIrx10VuR3Wd0H+lamcki3lYgQxZrpLRFMwgTqmI/m7t3zhm5QeEvMUJ1H14YMLA== + dependencies: + "@zag-js/utils" "1.31.1" + +"@zag-js/color-picker@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/color-picker/-/color-picker-1.31.1.tgz#547d2f354adf37f2dd47e551872c979452cc04a8" + integrity sha512-AWNZth49iEDxqh1DBZNSKpfEM/FF+MjL5bgUHVctnHdkpFsZLynJorWQQ4hNXNDFEc/I5w10KSxVCcO6tsPGFw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/color-utils" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/color-utils@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/color-utils/-/color-utils-1.31.1.tgz#444efc5c0fc0064b85915404980916137e8dde12" + integrity sha512-HdjTRU8C0tO6hK+PBVlu8iQH1MJaAnJAEdq2FcD97mq0PiPhrSj6iOftnrvPsE4CRieVFjnJWOvaubWFc4VmHA== + dependencies: + "@zag-js/utils" "1.31.1" + +"@zag-js/combobox@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/combobox/-/combobox-1.31.1.tgz#6719fe141ae01459814f8a242add2c56d127927f" + integrity sha512-IT0getSAGzngdRL20iX/iAh2d7DzVoMDDppOsOFBG2owKAgLpj8uLvUhy+lcrm6N8yxYOya89D6Aef7V5KdwlQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/aria-hidden" "1.31.1" + "@zag-js/collection" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/core@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/core/-/core-1.31.1.tgz#a8419dee9bb5e9b021009aba4b2aa44d6a48fda8" + integrity sha512-RaMJeqtjxG6k7iFD3WQnlyFJVT3yfQN+pJygAHH37GsMtiNzQQJOoesjb0LV9T27jwMXeNUzrh3MSDr1/0yVcQ== + dependencies: + "@zag-js/dom-query" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/date-picker@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/date-picker/-/date-picker-1.31.1.tgz#e9ec0419edd7e300279aa858e113e0038bb1b792" + integrity sha512-AOWN/IskGidVQt5g+uE9cILqJBTclE6OG1GC9WSWuyP/y4F+PdP/781SgYpYCZg/6pMGbL01PFKKb7xOOCeZAg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/date-utils" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/live-region" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/date-utils@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/date-utils/-/date-utils-1.31.1.tgz#42633d8163d4d5aa9c50b0cc00f8d28ba77b977c" + integrity sha512-+Aq9g/rqLeiRmnazgdZMc59gAxqxbw3GGy8AngrtNipgRtMhPlzGa3S4Qsq1yau6OKaHZ13uckUS+MhLNbBY+Q== + +"@zag-js/dialog@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/dialog/-/dialog-1.31.1.tgz#a87edd3d67ce0fc6e66c036bbb15723920724ff9" + integrity sha512-iaWlYQ6TYoVjM/X5+UZVZzKiMboE50GnEzGUpbhbeRNRiLqSu5dODSFzior1G4kde/ns5eN+BTf/Tm6AT4N2og== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/aria-hidden" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-trap" "1.31.1" + "@zag-js/remove-scroll" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/dismissable@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/dismissable/-/dismissable-1.31.1.tgz#93c56e85b2e0c71e0714da14d0600254da6c614e" + integrity sha512-jCdJwQmEkG6PlrN13fUk2l7ZclSu54FZwmT4xOtQpEbaiAiESm5KI5oyFh5jDPY47Goa28UJkEjWXVgKXKWb0g== + dependencies: + "@zag-js/dom-query" "1.31.1" + "@zag-js/interact-outside" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/dom-query@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/dom-query/-/dom-query-1.31.1.tgz#9b7e8ee3441dcb1b6c48f042177ffe293334d479" + integrity sha512-2tCZLwSfoXm62gwl0neiAN6u5VnzUhy5wHtKbX+klqGFatnca3Bm++H9+4PHMrwUWRbPg3H5N151lKFEOQhBfQ== + dependencies: + "@zag-js/types" "1.31.1" + +"@zag-js/editable@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/editable/-/editable-1.31.1.tgz#6bc4500a9c0acff1408a9ae83707d0f96e824159" + integrity sha512-JMICHw4/x0YqDy/n+I+TeaXlFbTA0j9w3UqOWMwUFQ+dAsq4JLXeqZDXu19MQN6yaTFdOpG1EFw4FEVTsu+d3Q== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/interact-outside" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/file-upload@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/file-upload/-/file-upload-1.31.1.tgz#2e6d063b68eb4b86d768dc543695cbc7e5cd35d5" + integrity sha512-cp7qMiXKrIcTfDamOz9wlnJLeBF8gucTI7Y+iKaP+hiIW+OG254GElfQiqXNDad3HUmD+Dt8Tx6uAzL/mw3sbQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/file-utils" "1.31.1" + "@zag-js/i18n-utils" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/file-utils@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/file-utils/-/file-utils-1.31.1.tgz#69a4f5142f7c2b6af7e1f1b42773af25e2df002f" + integrity sha512-MDDz52IdPh/mPUYrqUXvh7qDckJHs+mt5gjfx0N89qh2JNXuRU14zPotOKTzIKM4o+HFZkAT6BAfMpr9CX/0ug== + dependencies: + "@zag-js/i18n-utils" "1.31.1" + +"@zag-js/floating-panel@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/floating-panel/-/floating-panel-1.31.1.tgz#cfe2b6cc0e6ec12f3ea07b46f14cf4aa4dbc2788" + integrity sha512-Pjgd/wjdglZ90dtq/LC4o5sc6w0m+RehhPmJcIzq9T+E/Xrb6qrhf06QhxB9LwSj4DG/gIv87gmD2qF1VH7cRQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/rect-utils" "1.31.1" + "@zag-js/store" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/focus-trap@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/focus-trap/-/focus-trap-1.31.1.tgz#2417ce97dc6d28040378b152ddb22027e14f2492" + integrity sha512-omgUhAz1r81pYAujqYIIavdTKJzDRExioSiqhnx/xq10a6Q/xavMFflq8w7edMc9JHkTOnr9E5qh9abCVJjhpQ== + dependencies: + "@zag-js/dom-query" "1.31.1" + +"@zag-js/focus-visible@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/focus-visible/-/focus-visible-1.31.1.tgz#4cc4e8a391aab71f1be4141c741236a8ecf15fad" + integrity sha512-GC59A3yd7tj8aKhzvhrM+CEZZraXm5y/SpfIjz1J7kGV6eeXbUtjkbe75g99Ve8iJYfQVQlAj2GyN3oniHc5Zw== + dependencies: + "@zag-js/dom-query" "1.31.1" + +"@zag-js/highlight-word@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/highlight-word/-/highlight-word-1.31.1.tgz#d6554f7747f203075f33d3fb6b2510f65baca86e" + integrity sha512-nQw7t8LgWXW+6Z5E/p6T+OST0DDXp35mrFCzrkJL54aVTZ3GuLyIP2p0/HGQr2hE/KKLbZEs5i6UcXF84tiI4g== + +"@zag-js/hover-card@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/hover-card/-/hover-card-1.31.1.tgz#41b110332108ed2ed35bbe765b5b72460fb156fb" + integrity sha512-R74kz2wPgGwB3jKQeD91kdtlvVKpffWBJHqw8yCBd95GXGVmhym+BPoCToJzcqiemP8+0EtSuVPU9IHaSuJnSg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/i18n-utils@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/i18n-utils/-/i18n-utils-1.31.1.tgz#8cb701774b7235260872419b421f217cea481336" + integrity sha512-SARkFuo1+Q0WcNv4jqvxp5hjCOqu/gBa7p6BTh7v5Bo00QhKRM/bCvVt0EB6V+h2oejrZfkwZ0MwbpQiL6L2aQ== + dependencies: + "@zag-js/dom-query" "1.31.1" + +"@zag-js/image-cropper@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/image-cropper/-/image-cropper-1.31.1.tgz#96b79d9af49023a456049c8563a2cd56fdbd9306" + integrity sha512-hFuy4I3jIJ/iyJsnfbLX1l/cJtN42j7lwhw8TeWVX8Y+hHxFPMSKx7AQirt/hALUbyy7QsQgAd5IslpsYq1Nlg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/interact-outside@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/interact-outside/-/interact-outside-1.31.1.tgz#280bdcfb6f83aacca3b143197156cbdb98db62d6" + integrity sha512-oxBAlBqcatlxGUmhwUCRYTADIBrVoyxM1YrFzR1R8jhvVR/QCaxoLAyKwcA3mWXlZ8+NlXb7n5ELE11BZb/rEg== + dependencies: + "@zag-js/dom-query" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/json-tree-utils@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/json-tree-utils/-/json-tree-utils-1.31.1.tgz#54c495131dae7cdda09e77a38ad870e3f0b04fd2" + integrity sha512-wrNek2UBE69FWpo2f0E2MxiboBS+Uop79LeQU2jNDujA1o3x6b1Lp2r7Fl1sfnUWMdKVVQb44oqfIj2g3CTEmQ== + +"@zag-js/listbox@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/listbox/-/listbox-1.31.1.tgz#f83d8489d071187f1d4eb3d9e36af865df1c687d" + integrity sha512-LcTIr4I9eN4MR1nSRfQfseWgj4ybOXXAY2o5dBpEBL67dnCSX3swNb/4LQO+ebj077BViQb66pBb1KSoeHGkEQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/collection" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-visible" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/live-region@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/live-region/-/live-region-1.31.1.tgz#6fbd62e5f2559f77756f0136d8f4ee1ef02888fa" + integrity sha512-RBx8jk1dgvkEUuFs77SBZn0WwvEkeZgVawVu6XUAy4ENfhP0D/qkvwNk+Els8InKmr1gWKajD7sh+g8M40Ex6A== + +"@zag-js/marquee@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/marquee/-/marquee-1.31.1.tgz#670222a46ea629f677321b3d017d1cd0f0eb8a13" + integrity sha512-Rt7+zy7CDOxXm0PqaTcmuWxcrZOPOpZY4T6IxOZk4ZcOXJQ2v7CkF3EK0pdI9PyI6Zpk/YIwQkENjidT55db0A== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/menu@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/menu/-/menu-1.31.1.tgz#bdfc59e9931e3e2e6336a94acdaad0a4d94753d0" + integrity sha512-eJPRM8tlauRTsAoJXchDBzMzL2RhXYSHmHak2IJCDMApCV51p0MqGYP8Er3DbMSQTPUFuTq779uUIarDqW+zmA== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/rect-utils" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/navigation-menu@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/navigation-menu/-/navigation-menu-1.31.1.tgz#68f05a2cbad76eaee597c514fdc32b0a0b2d07ae" + integrity sha512-xS4aynqmB9NYicPbEW8lPPakAfDfSgIDL1pRVSD6f1+VXkHD6LgNn6jUNDNbFt65mGhLpA2IczbvLCxv0g/ISQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/number-input@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/number-input/-/number-input-1.31.1.tgz#efad93bb62d1cc04c0b8aef148cf25160f957cf6" + integrity sha512-vn+BXEZ2/g2CMIFFyjjye/SbCeW3I/rlszL8EyBmhMcuA1l51OX2WKry6HeQNiU41uMyFg2rb1pb5KVw1gJsCg== dependencies: "@internationalized/number" "3.6.5" - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/pagination@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/pagination/-/pagination-1.29.1.tgz#96333615aa1be315237eda46774310be9918a8ad" - integrity sha512-7KKCdUKPQNK6VuroRfxmxpNcWpuAUy6ZFvMUnaYFFBmCB7FGkOUAO1yEsYuJ9diAZvfprqw+8xnL5g93Xx/RtQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/password-input@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/password-input/-/password-input-1.29.1.tgz#593beb730d5e5bc28b84cd33948ead9e9e581fab" - integrity sha512-fbHzf2r3nW32ANj+/3SFKXLh6RYNe1udPPje8VlTmAgBPFKQ7f57S/G26EaFZHU7651B1VFzpJl1ERfnIty9UA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/pin-input@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/pin-input/-/pin-input-1.29.1.tgz#c6b64e53f2d5a9446e979a5f14168ff496f36540" - integrity sha512-i9umQG1QEH4RmX9U+YGj0YiBjb7q8jRRC1OtKUJj5vesHAN553eg0WLbHcmfgyF6NwfM73/S+0JRJ9v92neWWw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/popover@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/popover/-/popover-1.29.1.tgz#5a1f0cf1511161cd877cab76a92a86f0cb97dadb" - integrity sha512-MQ83k6JmvnvbvExZUvytNDUFZN7e4HHMdpq9meT5z1K+D9HaQ+gatHNk76cvv0H+yO+q90DDs5OUQ4ulzK/u2A== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/aria-hidden" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-trap" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/remove-scroll" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/popper@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/popper/-/popper-1.29.1.tgz#c2c2a03fa4d020996640611905161ca073f7b4e2" - integrity sha512-elVi8eWMMrmOvtv627cc3+1bAeKM1VIrB4enpd6ccponXcPosaSTXHMR+lSxy9uOWaHZ/GkqYs+fWzguUJznSA== + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/pagination@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/pagination/-/pagination-1.31.1.tgz#60b34682e5e887d6cd7c8ea05ff331f82f12474a" + integrity sha512-icW6FNzIKNz7iXU+prlQWpMFJedDrhmCKzzI39SY+dv5g1Gnrlc0b44PxvNl5PWFLSkB5KBT/R1WCqd8Kh4cCA== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/password-input@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/password-input/-/password-input-1.31.1.tgz#d6dded0eef022487b27f0315f1c8836aae6a70d9" + integrity sha512-AivOeNO14a39xhxVMB2TVmIjmQ89OwVz0+2IjX3JjLS2Pmia+gg9xnVd2kBIcKfnqUN4MBnzmk7t46YWJMQVVQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/pin-input@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/pin-input/-/pin-input-1.31.1.tgz#0301f4eb724d173d656ff877b5e3d461f4d89b7d" + integrity sha512-k3ESoX5ve5sbWBLTCPYAzgLjRU7mVNEUiqAOhRgazOcBGV5wjGh398zWb1jr0FMxPnoAMrXDN/CQwJTmJcMKrg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/popover@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/popover/-/popover-1.31.1.tgz#a6b6066b4898783929f21789cfad494d156a7d09" + integrity sha512-uCFJP3DFBkEBAre6lgGLw2xWS2ZIuT/DLeajIXb+8BmC9KCF0wY4c9qojx9F3rGMJQxcGl+WUoXENkOvkTaVhQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/aria-hidden" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-trap" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/remove-scroll" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/popper@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/popper/-/popper-1.31.1.tgz#fb6292df602dd5146e6b238393e8c62c53bbf1c9" + integrity sha512-wLXcEqzn9MK1rGbsgnDH26o5ZWqR4oeb6ZepKKy0gcuJl/1S5/dr1VBvxJNMZlf9d6etvYklG5LRnIVkXCbrjA== dependencies: "@floating-ui/dom" "1.7.4" - "@zag-js/dom-query" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/presence@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/presence/-/presence-1.29.1.tgz#c9b765f8554e09914277ff561e5b1b5bac443421" - integrity sha512-xJj9BT5YX2Pb7VnrABYXrU35BOoiM5yT9Y1baGqfQLkginZ+Cp2CwszL6856f2ZUw3xnxBfDsSTPznoH+p9Z7w== - dependencies: - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - -"@zag-js/progress@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/progress/-/progress-1.29.1.tgz#615ea1e1fef66a450d8deb69415c13a08d462751" - integrity sha512-UxyfFl+7dKKIqVxbyDjlXnAQSQt5gx0tWP7pt3KWuz6PSdU23fpq1dgv4YYBl8rX5EjX81B9uykE3WP8TRsz2w== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/qr-code@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/qr-code/-/qr-code-1.29.1.tgz#e43744b0c21673ef2b5f3cd41b18138f3f57e6e0" - integrity sha512-n8EpfB0QVN2AhhSQZEN3jfqnsuXmeW5jH7e7TA8as2RMYZXx1dSQLF1fiaKtx8VlS6/mKfMjokZqnhOGtIOXzw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/presence@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/presence/-/presence-1.31.1.tgz#fa5b6be77b687fecae040f50261171c0b12b0cfa" + integrity sha512-tv+WsBnA0abIlDuEfZMh0lRPF4cMs6kWJosNkGBwzeXnGds+KXjzpL2KDtwDgbJgN3sI0xHPMYjRy2v3ZamcDA== + dependencies: + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + +"@zag-js/progress@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/progress/-/progress-1.31.1.tgz#d4c9e9c59df095d718f7ce4661016e49afb1015a" + integrity sha512-f9lIDHCRcFAG14LVEKOAPTdqPzphwIIraC6fTr9AwmNlYI6/qFDkz3jOlYVSyk5VsJAIFM/777x/CdqjliiOqg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/qr-code@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/qr-code/-/qr-code-1.31.1.tgz#058f34c9b2ecb2b37991cb0e1bc6898ccac3c277" + integrity sha512-Rxh+HF12SgUp5rvTelp1qyLK3xkn37h2fT/L4eBQ0f8OUEo8wfowEbs36+1i61d6UuH7PJt4q/07eIf6vNVevA== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" proxy-memoize "3.0.1" uqr "0.1.2" -"@zag-js/radio-group@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/radio-group/-/radio-group-1.29.1.tgz#9f3617b2c7cc1809a738a23c189d22f2566c66b9" - integrity sha512-KFgF+8T+0nT6igPdCGmpsU5KxVsJVIsseVuABl3/IY679FZog0wAitbCHu9j/QoZxuS/kXj1eD2SbG/+92eDLQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-visible" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/rating-group@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/rating-group/-/rating-group-1.29.1.tgz#0d3d2db080798752a71c5f649b87597207edfeff" - integrity sha512-Vcqv9FvsxCGaIVlA9LucDiLbttLapyil8Jc8KpKLAODsj1FSVVwgK50AkJnLw7n7SRoD+zx8HTIB1txfT9AQiw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/react@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/react/-/react-1.29.1.tgz#b12088c0671bdc81596f32d50cc92db940997848" - integrity sha512-nvy7BruQojqQ0GLpHbP1BewJXVdqBLOkSzA2JA1BNRCCN19hZ8qCvpjAhZPYXoq1t9eecOju7K33lBFjpck9KA== - dependencies: - "@zag-js/core" "1.29.1" - "@zag-js/store" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/rect-utils@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/rect-utils/-/rect-utils-1.29.1.tgz#10cd71af6aaef6f58e40347d491f7f5b9f71a434" - integrity sha512-3gxfOQb6JlxSbhoX7ULax79gRA3mz9U7A9MduG0GAABgbIXp8SIawNMQBd+ZjfXjVOGeEoA8bEVvDsWnpQ5SIw== - -"@zag-js/remove-scroll@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/remove-scroll/-/remove-scroll-1.29.1.tgz#4f4dbfdacab23496f55db57e330c000642985dca" - integrity sha512-qv/Ipa0apWE20BMTGfvigSOgPn930fXRsdKvMMuJVzaamoGkubfcs1h3HkNG1g/IB1Bx4N7GwD6oWiCMaeHdlQ== - dependencies: - "@zag-js/dom-query" "1.29.1" - -"@zag-js/scroll-area@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/scroll-area/-/scroll-area-1.29.1.tgz#fa62548f7f7853c04da0e5053bbf06d5adddfe9e" - integrity sha512-IVrX6GidcHSmxlTMCBRnQLyOwt6JFrwSlrXB3NptSO72OXk/Lm8GSXAQwek8ijmCHDQtbjHWDLufG5ACEvMNaQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/scroll-snap@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/scroll-snap/-/scroll-snap-1.29.1.tgz#b2bad9875dde5555280077d32894e9eb078727ba" - integrity sha512-M/fZDx1IGB6D1IWhouR06q7XAYxpv85ag8Gvz+JVXG4mpo6UBg6t4Ur+DJ4CEfS6KyNmR8pnImZ4aoqmkhiMag== - dependencies: - "@zag-js/dom-query" "1.29.1" - -"@zag-js/select@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/select/-/select-1.29.1.tgz#331722ed1d1c92bb5e67b665c8e017dc44d3c154" - integrity sha512-LtQqZ2Psu6x8LmJhJh5RI0H8imgzmXCvupaGXIm3SDbKhnmT561RHVeupi5KUaz4OUN/qz3FSMVZzpex5ndfAw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/collection" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/signature-pad@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/signature-pad/-/signature-pad-1.29.1.tgz#4fe2c95dd6b0e5a2db768a4d1337cf4f372f1ee5" - integrity sha512-N+ej4a99voyR+Xm5w4ma0DsDoSEP/nYrwL9mYSik02/rZs/qPz5ve+qbuUJkLeuzNa3gvzoZhaaVjZb9IuyQbw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" +"@zag-js/radio-group@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/radio-group/-/radio-group-1.31.1.tgz#ef20d1267d1e2365c719bd586b2d2b0d9846296c" + integrity sha512-OfKIdEtSG0EuHM+cFVqcR+04yzZmcDRgG3j0QhoJsyS1my63ZHbwC2HNAtfPFh4U4sJx9yUexwSzPGZ6pOzIdw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-visible" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/rating-group@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/rating-group/-/rating-group-1.31.1.tgz#b68a8d6dfc68cbdcd5d6348da096014e162a2a64" + integrity sha512-BkQUglKm4a+KXYPACYvIvBJSuEyzV0YQqjjiucwJ5UiOlK72C66VBvyGN+DqJRDnkU1K5azt6E1Ja5ANk3fgsg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/react@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/react/-/react-1.31.1.tgz#7589c927e779848f4c2b46f9167173db2b93ff72" + integrity sha512-a7uYH+tcw1UYbcovyVBzlh6X8KztK/b1+s8sMs4Srhd24M+hZMetV94Z0bM1Km5aNAnoS4gkH3gtJjH0OphquQ== + dependencies: + "@zag-js/core" "1.31.1" + "@zag-js/store" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/rect-utils@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/rect-utils/-/rect-utils-1.31.1.tgz#c6dcbc96d76f4ebb8bad618b02eba6e4a31c466a" + integrity sha512-lBFheAnz8+3aGDFjqlkw0Iew/F03lFjiIf26hkkcFSZu0ltNZUMG/X3XLHUnHxdfbdBguc8ons6mr2MkVvisng== + +"@zag-js/remove-scroll@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/remove-scroll/-/remove-scroll-1.31.1.tgz#d9f3347dd28d1fc6369d736f479350cca62080ae" + integrity sha512-gVVJuFKaCjo652RmajYmkjXKgjJWLQ5ZhZLTaLUKWM1mAarvlqnLui8jrHEHLxqpfsjQylfdhJKkWmyF8NAgTA== + dependencies: + "@zag-js/dom-query" "1.31.1" + +"@zag-js/scroll-area@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/scroll-area/-/scroll-area-1.31.1.tgz#37d7412cdc9506ebb4ae417811aff51c74f75d86" + integrity sha512-GBXd1K3U0AHwWlJaqAMKQMZyeoxuBO6XYrVgdvzgiftQbJrZs5fuYOFyDvPLDWHTLYxaHso44/f+9EmAUAiytw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/scroll-snap@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/scroll-snap/-/scroll-snap-1.31.1.tgz#13f43987259fed9b7388f4bcc8b18c284f0d7d7e" + integrity sha512-YWsfhcQqiffu2X9HuB0fMnEQAu6rEOfGcvQYinvB6pjWPOvIJGxGMi/dYyy21XQDNJ9K1IcWRIo/yuaajoJyQQ== + dependencies: + "@zag-js/dom-query" "1.31.1" + +"@zag-js/select@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/select/-/select-1.31.1.tgz#aa514e8668e5d720a41bbadf10c4f6720247bc48" + integrity sha512-vKWb8BiRY83Y3HkDNnimf6cr1yvzJh1HwZlzXFz0y47zEvlikQaf+r96obR78RgTtMjNTTV15tTXdc1/WFoYkw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/collection" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/signature-pad@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/signature-pad/-/signature-pad-1.31.1.tgz#b48bac5dd2c38eb689886b822da1936df4dfad39" + integrity sha512-bz3WtLuIZoLrJDKcdS7fPAdD/Qi9wKiKACl5cu+ftv9zg8w+qqYNLtjH9HxeUFbCtQRKqcdXjO/UZ8iL07hgsQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" perfect-freehand "^1.2.2" -"@zag-js/slider@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/slider/-/slider-1.29.1.tgz#8f7df6335d6ba4490f34bb064d2680f43d19a97a" - integrity sha512-BHT3GqM54TjnzuqJfVjcreDFfkXLQNKXBKdTRKQtOkSNsQ7M9Lci8UBHn4WcvQJN5RZ37zsc+Z7zHfHEe/1KSg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/splitter@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/splitter/-/splitter-1.29.1.tgz#c3c8956a1551363940d5f70ead2f7c1b3a7e784c" - integrity sha512-Ky5xddGoSxhinNl4XuJRCWfBYsV4JVPZ7k/o49KZb1+dtD2gGyKW7aJmFV7oGAtB3TBm96CTNsC/vraGVJrr/A== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/steps@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/steps/-/steps-1.29.1.tgz#203e54644b00d07a4e2b1c241b5d2af038df64d8" - integrity sha512-Bd6Fx1jii9SWjweKISjRh2Wi8OdZJgreH71gNOAjY7BlANhBD+V/euaGX2CwrQXNh1UnBYXYpy664p5aQbkbjg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/store@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/store/-/store-1.29.1.tgz#c0a6c5699c31dbf75ca6f6257972cf833ac2c59f" - integrity sha512-SDyYek8BRtsRPz/CbxmwlXt6B0j6rCezeZN6uAswE4kkmO4bfAjIErrgnImx3TqfjMXlTm4oFUFqeqRJpdnJRg== +"@zag-js/slider@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/slider/-/slider-1.31.1.tgz#af9ab16b79d65f7d6a7f36d18cbc3333ee902484" + integrity sha512-FILbLTMd3BnyclZ28+ippfyqzYPGK60qZapxtTERmWDC75Okf8AFnTCQf84Y8jRmBKCS1yhjF+IOtkFAENeB6w== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/splitter@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/splitter/-/splitter-1.31.1.tgz#29d84f3d689eb8e2ae26c18a1653178ddcdefd46" + integrity sha512-7SGBT2/xKsOzeSQEg+Otn1XV3RHrAz3jTySjBRKoEmdxubhfREqbKotbGVG65aTve11fQnmJ3Oyt3GJOeraxLA== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/steps@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/steps/-/steps-1.31.1.tgz#66dd823ffda8446999903c7182eb1f14bbe87073" + integrity sha512-KsBH38V3tH9/q8CDgx4sUSXLYwFdcp1crZy8hTIcN0RUiZ55PmqYKkN2znzBjTbaCW9yhP8kXsbuo2s8OIU5lQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/store@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/store/-/store-1.31.1.tgz#aceafec78957bcf5d8f94db8fa56f7a38f113834" + integrity sha512-d5ZTRciTuXOGQ3nML15kQLaTiR1wJPxT1Fu1nN659X6Rl8DPtubYaRCZ3RCk9Kyiyg2z5HxeVqDswaDvGbM9Rg== dependencies: proxy-compare "3.0.1" -"@zag-js/switch@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/switch/-/switch-1.29.1.tgz#15a05a9cc9124be51888c29c95514a573e9b8f08" - integrity sha512-/Ztm/QDAQBFDcERadobfDuJufXHCBqPh/Mmuau1OTeZ+6EfwRCsPOzHsPmKUpQHOqerMXkYvDbFkNHjS7pfAYg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-visible" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/tabs@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/tabs/-/tabs-1.29.1.tgz#c929634173d654cb8ffd21fb53015761caa36933" - integrity sha512-aicopH3c9Nf+HiybboNPtpdL7iNue48BJn4buBm/6cJ+6Xw/rqHaPpodayS2JNWro7tVdT2erf5+My/sD96MUg== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/tags-input@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/tags-input/-/tags-input-1.29.1.tgz#d4c82b85f6d60c256d8a41026d82c145c7ee720c" - integrity sha512-izj0IVpBIRKGvd/RlO5zhupmZIHhlH96hBSWNQ1jwETmJRFnsV8RihyQ4P5XzQ9pfFlQozff58YoffunHk2KsA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/auto-resize" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/interact-outside" "1.29.1" - "@zag-js/live-region" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/timer@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/timer/-/timer-1.29.1.tgz#63df85bfb6dbea20639c62ed4a69f131a37f4396" - integrity sha512-v2pFcO7VHlVFdRXkW6zRNWt7VWArxbpD3id2MkaRWQ2FOi1kFfvOD/Vyy0pG5ymreclULgP9Mm1P22Fg8r++JA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/toast@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/toast/-/toast-1.29.1.tgz#1ae95ee98da6768563d93d43598cd26f1c4e95fa" - integrity sha512-x3gTqe9bRcqEnfwCFlugFmde5n0sYqHw01zNrp38s9zi4OZ8zeUJLK1tF0JSmEWClXECjV25E3V4Fm1ECRgRsA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/toggle-group@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/toggle-group/-/toggle-group-1.29.1.tgz#97e026e1ac6fe44ed0fc4d509b26d798387aef4b" - integrity sha512-Yava/DsXl7zRN0zPjVw4NO9HBh3cFEIyW0GXcm6BCmBpoD3eLUktUHskeCAIxnErLhAcL5NxZwAmt4+FB60Nsw== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/toggle@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/toggle/-/toggle-1.29.1.tgz#f381422a754da98258f6035c6d106c7c5ba6b854" - integrity sha512-pWjHq19RASVOmVi+S34pftBwCVZX676BZEgn/JmVq93Zn8VtOZRzqtRfgeios15Q+1acJkW0EmEZZW38CAQ7cQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/tooltip@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/tooltip/-/tooltip-1.29.1.tgz#1c209169497907ea4610f342649187e76552803e" - integrity sha512-oKtfLEPwoX1PERVknfQjBh6H6IQRMeQjF+cmyf7ix0vSbPjCMx7ZniyRzeujk/4McG9HISnhRvkQCReiBiDMiA== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-visible" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/tour@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/tour/-/tour-1.29.1.tgz#2365d2e229070ded32fac06c256d2b77fce863b4" - integrity sha512-wjqSN+iMD5GomNVOc/bKOleCGbxGxErxtbKPXqQpqheADHXm1wl55O4gl2QpOsJuLRUiXhS8YJn2efULRPEA9g== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dismissable" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/focus-trap" "1.29.1" - "@zag-js/interact-outside" "1.29.1" - "@zag-js/popper" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/tree-view@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/tree-view/-/tree-view-1.29.1.tgz#f3a03e47cb1205af824b09bbed4954644da25fae" - integrity sha512-0QMKpVY5xXq6sLf4aYgIHUMbtnmuhOgkQLYkEqN3rVnEfZRIr7YeIlLtPPad+oY8VetHRTBe4EfM80yrFHviLQ== - dependencies: - "@zag-js/anatomy" "1.29.1" - "@zag-js/collection" "1.29.1" - "@zag-js/core" "1.29.1" - "@zag-js/dom-query" "1.29.1" - "@zag-js/types" "1.29.1" - "@zag-js/utils" "1.29.1" - -"@zag-js/types@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/types/-/types-1.29.1.tgz#58ba6edd4ccd8e562eca99ccfb80677aa668bcf1" - integrity sha512-/TVhGOxfakEF0IGA9s9Z+5hhzB5PJhLiGsr+g+nj8B2cpZM4HMQGi1h5N2EDXzTTRVEADqCB9vHwL4nw9gsBIw== - dependencies: - csstype "3.1.3" - -"@zag-js/utils@1.29.1": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@zag-js/utils/-/utils-1.29.1.tgz#4ea1c41394beef3cfaddfca314019082de169767" - integrity sha512-qxGlQPcNn9QeP/F/KynnP2aPPUhjfVM0FrEiTzRTnt62kF+aLJBoYmLzoSnU8WqUq7dW5El71POW6lYyI7WQkg== +"@zag-js/switch@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/switch/-/switch-1.31.1.tgz#4198ca6edc54828959194a2e3f9daf889944e989" + integrity sha512-Jii3OSqSa9sQux+hvSRvp9dirzUF09+PAjrLjCQs+BT08EZ0XqeGvVzM0Wqf9LFy07HdLZntai3IUaXLF6byBw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-visible" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/tabs@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/tabs/-/tabs-1.31.1.tgz#69bbbff16ae554e470ed4001565030b14872902c" + integrity sha512-QBq4ngpBNMNEI7Wuaq8llwHOqgcVbNHHEDC5zHg60Bf7MY5ltP8wSq6Kldu0zZRVwrLzanYoMELDUyf9H0vtnw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/tags-input@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/tags-input/-/tags-input-1.31.1.tgz#21b807d8c9aa457601bd5c4a4bd60e62cfba3e3c" + integrity sha512-V4lJe/aMIs7WVoXYfszU6E3iARLLRQFMiycu76/slb8NWJiLrkSIaMQ4FAe2pqkodgCWXA83tuaeAZRq7ouTFg== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/auto-resize" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/interact-outside" "1.31.1" + "@zag-js/live-region" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/timer@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/timer/-/timer-1.31.1.tgz#c4d8976da52530d16360c38c887de931f2eaa897" + integrity sha512-bXfeSbneWGOBKlD5dYq06T8CSY9Ky+qb1yIfJAFsRF4n34mpUYRdtfwpNQYyddGpkLD7oH4VibajeZXB7HaL0g== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/toast@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/toast/-/toast-1.31.1.tgz#5370c81d90550cf4d36cecb8e7de2d8e86a44ada" + integrity sha512-MueHEei9ol3H6tWBruLxF7yEUpV3vsJ8brTQVRRtPr/6pqBs5kGzfL4YskhQ2tiwO6egay8YrkbaS3xJfpKt4w== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/toggle-group@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/toggle-group/-/toggle-group-1.31.1.tgz#1490a114f6a4b515e12398a485fdf7495311eb77" + integrity sha512-Mojc7mex01/gvwXfrUIIThzT7HOktZoMge9rrb6+P7rQX7ulyNXYPjQrW2tay+t54GOJ3xODo9dU7PpRzXeHbw== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/toggle@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/toggle/-/toggle-1.31.1.tgz#3ed4d3fb602179bcfab094c98abe6291528b7cf7" + integrity sha512-HbFBuGfdyYkNvOp3cEB8Civ4E92finT4u3e4LKysB4/LboqKA0cJvFhSnHyThbROONTx06W/3CxwoSFR4o8IhA== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/tooltip@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/tooltip/-/tooltip-1.31.1.tgz#db7d0c063a674c1d8f7361365f08a32a90217cfe" + integrity sha512-pWEU5XhEPpnyl2VLrGJlyjj7+p+X0UX3Fld+WGhc/hCaWiuW2ZzD/ewDRhSOZu4/TzAO3axrPqG1YhW4fhogKQ== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-visible" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/tour@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/tour/-/tour-1.31.1.tgz#0f0e3823316fb239cf168045b5d1103b17b53afb" + integrity sha512-ZmcAevXxoENHmHG0xwdIt1oCLe2/DW1CEBFPr7YuGKc+FU3QbBVZMzcBHrJCe0nkKXhUKzHOHM78bOHD/gM76w== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dismissable" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/focus-trap" "1.31.1" + "@zag-js/interact-outside" "1.31.1" + "@zag-js/popper" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/tree-view@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/tree-view/-/tree-view-1.31.1.tgz#3d1755d8729468b778ae48dec32fdcd64aee0000" + integrity sha512-Q+VSQz7X1XR8gT7ICWXlQOJIvzTWw/9BlF7B073UpEgAKRFlD11FmERka5y/BYqj8uE0vazcbSEA3Vc2dgCMJA== + dependencies: + "@zag-js/anatomy" "1.31.1" + "@zag-js/collection" "1.31.1" + "@zag-js/core" "1.31.1" + "@zag-js/dom-query" "1.31.1" + "@zag-js/types" "1.31.1" + "@zag-js/utils" "1.31.1" + +"@zag-js/types@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/types/-/types-1.31.1.tgz#a42e7059a33b81bd2d63e4625d45a3a413eafd77" + integrity sha512-mKw5DoeBjFykfUHv3ifCRjcogFTqp0aCCsmqQMfnf+J/mg2aXpAx76AXT1PYXAVVhxdP6qGXNd0mOQZDVrIlSQ== + dependencies: + csstype "3.2.3" + +"@zag-js/utils@1.31.1": + version "1.31.1" + resolved "https://registry.yarnpkg.com/@zag-js/utils/-/utils-1.31.1.tgz#4dfdc7d43eec354b585d9f5d9886681e3e1cbbe1" + integrity sha512-KLm0pmOtf4ydALbaVLboL7W98TDVxwVVLvSuvtRgV53XTjlsVopTRA5/Xmzq2NhWujDZAXv7bRV603NDgDcjSw== a5-js@^0.5.0: version "0.5.0" @@ -3498,11 +3579,6 @@ a5-js@^0.5.0: dependencies: gl-matrix "^3.4.3" -abbrev@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" - integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg== - abbrev@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-4.0.0.tgz#ec933f0e27b6cd60e89b5c6b2a304af42209bb05" @@ -3572,7 +3648,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^6.1.0, ansi-styles@^6.2.1: +ansi-styles@^6.2.1: version "6.2.3" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== @@ -3693,10 +3769,10 @@ base64-js@^1.1.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.8.25: - version "2.8.29" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz#d8800b71399c783cb1bf2068c2bcc3b6cfd7892c" - integrity sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA== +baseline-browser-mapping@^2.9.0: + version "2.9.14" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz#3b6af0bc032445bca04de58caa9a87cfe921cbb3" + integrity sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg== before-after-hook@^4.0.0: version "4.0.0" @@ -3754,15 +3830,15 @@ brotli@^1.3.2: base64-js "^1.1.2" browserslist@^4.24.0: - version "4.28.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929" - integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: - baseline-browser-mapping "^2.8.25" - caniuse-lite "^1.0.30001754" - electron-to-chromium "^1.5.249" + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" node-releases "^2.0.27" - update-browserslist-db "^1.1.4" + update-browserslist-db "^1.2.0" buf-compare@^1.0.0: version "1.0.1" @@ -3784,7 +3860,7 @@ bytewise@^1.1.0: bytewise-core "^1.2.2" typewise "^1.0.3" -cacache@^20.0.0, cacache@^20.0.1, cacache@^20.0.2: +cacache@^20.0.0, cacache@^20.0.1, cacache@^20.0.3: version "20.0.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-20.0.3.tgz#bd65205d5e6d86e02bbfaf8e4ce6008f1b81d119" integrity sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw== @@ -3806,10 +3882,10 @@ callsites@^3.0.0, callsites@^3.1.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001754: - version "1.0.30001755" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz#c01cfb1c30f5acf1229391666ec03492f4c332ff" - integrity sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA== +caniuse-lite@^1.0.30001759: + version "1.0.30001764" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz#03206c56469f236103b90f9ae10bcb8b9e1f6005" + integrity sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g== cartocolor@^5.0.2: version "5.0.2" @@ -3824,9 +3900,9 @@ ccount@^2.0.0: integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== chai@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.1.tgz#d1e64bc42433fbee6175ad5346799682060b5b6a" - integrity sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg== + version "6.2.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" + integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== chalk-template@^0.4.0: version "0.4.0" @@ -4164,12 +4240,7 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -csstype@^3.0.2, csstype@^3.2.2, csstype@^3.2.3: +csstype@3.2.3, csstype@^3.0.2, csstype@^3.2.2, csstype@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== @@ -4187,9 +4258,9 @@ csstype@^3.0.2, csstype@^3.2.2, csstype@^3.2.3: integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== "d3-format@1 - 3", d3-format@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" - integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.2.tgz#01fdb46b58beb1f55b10b42ad70b6e344d5eb2ae" + integrity sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg== d3-hexbin@^0.2.1: version "0.2.2" @@ -4228,7 +4299,7 @@ d3-scale@^4.0.0, d3-scale@^4.0.2: dependencies: d3-array "2 - 3" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.1, debug@^4.4.3: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -4294,9 +4365,9 @@ devlop@^1.0.0, devlop@^1.1.0: dequal "^2.0.0" diff@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.2.tgz#712156a6dd288e66ebb986864e190c2fc9eddfae" - integrity sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg== + version "8.0.3" + resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.3.tgz#c7da3d9e0e8c283bb548681f8d7174653720c2d5" + integrity sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ== dir-glob@^3.0.1: version "3.0.1" @@ -4341,15 +4412,10 @@ earcut@^3.0.2: resolved "https://registry.yarnpkg.com/earcut/-/earcut-3.0.2.tgz#d478a29aaf99acf418151493048aa197d0512248" integrity sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ== -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -electron-to-chromium@^1.5.249: - version "1.5.255" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.255.tgz#fe9294ce172241eb50733bc00f2bd00d9c1e4ec7" - integrity sha512-Z9oIp4HrFF/cZkDPMpz2XSuVpc1THDpT4dlmATFlJUIBVCy9Vap5/rIXsASP1CscBacBqhabwh8vLctqBwEerQ== +electron-to-chromium@^1.5.263: + version "1.5.267" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" + integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== emoji-regex@^10.3.0: version "10.6.0" @@ -4361,11 +4427,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - emojilib@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" @@ -4414,36 +4475,36 @@ es-module-lexer@^1.7.0: integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== esbuild@^0.27.0: - version "0.27.1" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.1.tgz#56bf43e6a4b4d2004642ec7c091b78de02b0831a" - integrity sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA== + version "0.27.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.2.tgz#d83ed2154d5813a5367376bb2292a9296fc83717" + integrity sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== optionalDependencies: - "@esbuild/aix-ppc64" "0.27.1" - "@esbuild/android-arm" "0.27.1" - "@esbuild/android-arm64" "0.27.1" - "@esbuild/android-x64" "0.27.1" - "@esbuild/darwin-arm64" "0.27.1" - "@esbuild/darwin-x64" "0.27.1" - "@esbuild/freebsd-arm64" "0.27.1" - "@esbuild/freebsd-x64" "0.27.1" - "@esbuild/linux-arm" "0.27.1" - "@esbuild/linux-arm64" "0.27.1" - "@esbuild/linux-ia32" "0.27.1" - "@esbuild/linux-loong64" "0.27.1" - "@esbuild/linux-mips64el" "0.27.1" - "@esbuild/linux-ppc64" "0.27.1" - "@esbuild/linux-riscv64" "0.27.1" - "@esbuild/linux-s390x" "0.27.1" - "@esbuild/linux-x64" "0.27.1" - "@esbuild/netbsd-arm64" "0.27.1" - "@esbuild/netbsd-x64" "0.27.1" - "@esbuild/openbsd-arm64" "0.27.1" - "@esbuild/openbsd-x64" "0.27.1" - "@esbuild/openharmony-arm64" "0.27.1" - "@esbuild/sunos-x64" "0.27.1" - "@esbuild/win32-arm64" "0.27.1" - "@esbuild/win32-ia32" "0.27.1" - "@esbuild/win32-x64" "0.27.1" + "@esbuild/aix-ppc64" "0.27.2" + "@esbuild/android-arm" "0.27.2" + "@esbuild/android-arm64" "0.27.2" + "@esbuild/android-x64" "0.27.2" + "@esbuild/darwin-arm64" "0.27.2" + "@esbuild/darwin-x64" "0.27.2" + "@esbuild/freebsd-arm64" "0.27.2" + "@esbuild/freebsd-x64" "0.27.2" + "@esbuild/linux-arm" "0.27.2" + "@esbuild/linux-arm64" "0.27.2" + "@esbuild/linux-ia32" "0.27.2" + "@esbuild/linux-loong64" "0.27.2" + "@esbuild/linux-mips64el" "0.27.2" + "@esbuild/linux-ppc64" "0.27.2" + "@esbuild/linux-riscv64" "0.27.2" + "@esbuild/linux-s390x" "0.27.2" + "@esbuild/linux-x64" "0.27.2" + "@esbuild/netbsd-arm64" "0.27.2" + "@esbuild/netbsd-x64" "0.27.2" + "@esbuild/openbsd-arm64" "0.27.2" + "@esbuild/openbsd-x64" "0.27.2" + "@esbuild/openharmony-arm64" "0.27.2" + "@esbuild/sunos-x64" "0.27.2" + "@esbuild/win32-arm64" "0.27.2" + "@esbuild/win32-ia32" "0.27.2" + "@esbuild/win32-x64" "0.27.2" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" @@ -4554,9 +4615,9 @@ espree@^10.0.1, espree@^10.4.0: eslint-visitor-keys "^4.2.1" esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== dependencies: estraverse "^5.1.0" @@ -4610,9 +4671,9 @@ execa@^8.0.0: strip-final-newline "^3.0.0" execa@^9.0.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-9.6.0.tgz#38665530e54e2e018384108322f37f35ae74f3bc" - integrity sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw== + version "9.6.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.6.1.tgz#5b90acedc6bdc0fa9b9a6ddf8f9cbb0c75a7c471" + integrity sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA== dependencies: "@sindresorhus/merge-streams" "^4.0.0" cross-spawn "^7.0.6" @@ -4628,9 +4689,9 @@ execa@^9.0.0: yoctocolors "^2.1.1" expect-type@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.2.tgz#c030a329fb61184126c8447585bc75a7ec6fbff3" - integrity sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" + integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== exponential-backoff@^3.1.1: version "3.1.3" @@ -4795,14 +4856,6 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -foreground-child@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" - integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== - dependencies: - cross-spawn "^7.0.6" - signal-exit "^4.0.1" - from2@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -4812,9 +4865,9 @@ from2@^2.3.0: readable-stream "^2.0.0" fs-extra@^11.0.0: - version "11.3.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" - integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== + version "11.3.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.3.tgz#a27da23b72524e81ac6c3815cc0179b8c74c59ee" + integrity sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -4860,9 +4913,9 @@ geojson-equality-ts@^1.0.2: "@types/geojson" "^7946.0.14" geojson-polygon-self-intersections@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/geojson-polygon-self-intersections/-/geojson-polygon-self-intersections-1.2.1.tgz#7018edabe58e9262f20821a7334953708c78bbb7" - integrity sha512-/QM1b5u2d172qQVO//9CGRa49jEmclKEsYOQmWP9ooEjj63tBM51m2805xsbxkzlEELQ2REgTf700gUhhlegxA== + version "1.2.2" + resolved "https://registry.yarnpkg.com/geojson-polygon-self-intersections/-/geojson-polygon-self-intersections-1.2.2.tgz#22abfb6d267390450ec104d5941305e4ed604277" + integrity sha512-6XRNF4CsRHYmR9z5YuIk5f/aOototnDf0dgMqYGcS7y1l57ttt6MAIAxl3rXyas6lq1HEbTuLMh4PgvO+OV42w== dependencies: rbush "^2.0.1" @@ -4947,18 +5000,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^11.0.3: - version "11.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-11.1.0.tgz#4f826576e4eb99c7dad383793d2f9f08f67e50a6" - integrity sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw== - dependencies: - foreground-child "^3.3.1" - jackspeak "^4.1.1" - minimatch "^10.1.1" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^2.0.0" - glob@^13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.0.tgz#9d9233a4a274fc28ef7adce5508b7ef6237a1be3" @@ -4994,9 +5035,9 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== h3-js@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/h3-js/-/h3-js-4.3.0.tgz#d8705d50f1bf241cad90075498f168d4a6ab933f" - integrity sha512-zgvyHZz5bEKeuyYGh0bF9/kYSxJ2SqroopkXHqKnD3lfjaZawcxulcI9nWbNC54gakl/2eObRLHWueTf1iLSaA== + version "4.4.0" + resolved "https://registry.yarnpkg.com/h3-js/-/h3-js-4.4.0.tgz#858586205d49fc2b164df8e2d1ab855565ee9e81" + integrity sha512-DvJh07MhGgY2KcC4OeZc8SSyA+ZXpdvoh6uCzGpoKvWtZxJB+g6VXXC1+eWYkaMIsLz7J/ErhOalHCpcs1KYog== handlebars@^4.7.7: version "4.7.8" @@ -5027,6 +5068,23 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" +hast-util-to-html@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005" + integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + hast-util-to-jsx-runtime@^2.0.0: version "2.3.6" resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" @@ -5103,6 +5161,11 @@ html-url-attributes@^3.0.0: resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + http-cache-semantics@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" @@ -5224,7 +5287,7 @@ ini@^6.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-6.0.0.tgz#efc7642b276f6a37d22fdf56ef50889d7146bf30" integrity sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ== -init-package-json@^8.2.3: +init-package-json@^8.2.4: version "8.2.4" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-8.2.4.tgz#dc3c1c13e6b2da9631acb5b4763f5d5523133647" integrity sha512-SqX/+tPl3sZD+IY0EuMiM1kK1B45h+P6JQPo3Q9zlqNINX2XiX3x/WSbYGFqS6YCkODNbGb3L5RawMrYE/cfKw== @@ -5419,13 +5482,6 @@ issue-parser@^7.0.0: lodash.isstring "^4.0.1" lodash.uniqby "^4.7.0" -jackspeak@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.1.tgz#96876030f450502047fc7e8c7fcf8ce8124e43ae" - integrity sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - java-properties@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" @@ -5441,7 +5497,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: +js-yaml@^4.1.0, js-yaml@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== @@ -5590,13 +5646,13 @@ libnpmaccess@^10.0.3: npm-package-arg "^13.0.0" npm-registry-fetch "^19.0.0" -libnpmdiff@^8.0.10: - version "8.0.10" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-8.0.10.tgz#966c36a3203d18b410cecc7846db87ab8acf676c" - integrity sha512-kfm/5KD0yaCfbFj+b3QiIetypzpOh1n0ZuUoirQUBRzw0bhm9hAEBx6TmMgvSumNE9nrD0ZTrk8MRMomIenuuA== +libnpmdiff@^8.0.12: + version "8.0.12" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-8.0.12.tgz#c55c80e0cb196588174989f36c285750fe7de048" + integrity sha512-M33yWsbxCUv4fwquYNxdRl//mX8CcmY+pHhZZ+f8ihKh+yfcQw2jROv0sJQ3eX5FzRVJKdCdH7nM0cNlHy83DQ== dependencies: - "@npmcli/arborist" "^9.1.7" - "@npmcli/installed-package-contents" "^3.0.0" + "@npmcli/arborist" "^9.1.9" + "@npmcli/installed-package-contents" "^4.0.0" binary-extensions "^3.0.0" diff "^8.0.2" minimatch "^10.0.3" @@ -5604,12 +5660,12 @@ libnpmdiff@^8.0.10: pacote "^21.0.2" tar "^7.5.1" -libnpmexec@^10.1.9: - version "10.1.9" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-10.1.9.tgz#8a8e72f8456a365dd874572d4678cc1a05f805b6" - integrity sha512-aU4cU0j04ThhvfhZRrO1a69k0ZzWqqziQk78yhd8KIsPpU464rBQStqoWYyhHwtCKeXmjTP1EEG00dz9ref7Sg== +libnpmexec@^10.1.11: + version "10.1.11" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-10.1.11.tgz#6ccc19f2d81c0eeb4f72f2fe09e8fc1637f5ec7f" + integrity sha512-228ZmYSfElpfywVFO3FMieLkFUDNknExXLLJoFcKJbyrucHc8KgDW4i9F4uJGNrbPvDqDtm7hcSEvrneN0Anqg== dependencies: - "@npmcli/arborist" "^9.1.7" + "@npmcli/arborist" "^9.1.9" "@npmcli/package-json" "^7.0.0" "@npmcli/run-script" "^10.0.0" ci-info "^4.0.0" @@ -5617,17 +5673,17 @@ libnpmexec@^10.1.9: pacote "^21.0.2" proc-log "^6.0.0" promise-retry "^2.0.1" - read "^4.0.0" + read "^5.0.1" semver "^7.3.7" signal-exit "^4.1.0" walk-up-path "^4.0.0" -libnpmfund@^7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-7.0.10.tgz#3bb4fd03114a4aa4d64c899d5c744df0a8f84598" - integrity sha512-0XpbyFta5kR/sUEfHF3gGFvHlOshT+o8mRgrRzv2Icw6WrD9KFMRP5c2+B96oonw2hRlZkg3W/BwJXBaoOUBQQ== +libnpmfund@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-7.0.12.tgz#0a8afd552c0e9d56b8e5904599406d62f2a640be" + integrity sha512-Jg4zvboAkI35JFoywEleJa9eU0ZIkMOZH3gt16VoexaYV3yVTjjIr4ZVnPx+MfsLo28y6DHQ8RgN4PFuKt1bhg== dependencies: - "@npmcli/arborist" "^9.1.7" + "@npmcli/arborist" "^9.1.9" libnpmorg@^8.0.1: version "8.0.1" @@ -5637,12 +5693,12 @@ libnpmorg@^8.0.1: aproba "^2.0.0" npm-registry-fetch "^19.0.0" -libnpmpack@^9.0.10: - version "9.0.10" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-9.0.10.tgz#67861e50f200332f6c4493ef7cffdc4b7e0a7d35" - integrity sha512-NybhghXECyrW5CjeKrRVzg8m4oRHGNHYShd8Td8YE+g5Ngq8pVnbt/5bHlK5mOX6mfsmrfFHwyNUoMGUZf/V/w== +libnpmpack@^9.0.12: + version "9.0.12" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-9.0.12.tgz#1514e3caa44f47896089bfa7f474beb8a10de21a" + integrity sha512-32j+CIrJhVngbqGUbhnpNFnPi6rkx6NP1lRO1OHf4aoZ57ad+mTkS788FfeAoXoiJDmfmAqgZejXRmEfy7s6Sg== dependencies: - "@npmcli/arborist" "^9.1.7" + "@npmcli/arborist" "^9.1.9" "@npmcli/run-script" "^10.0.0" npm-package-arg "^13.0.0" pacote "^21.0.2" @@ -5725,9 +5781,9 @@ locate-path@^6.0.0: p-locate "^5.0.0" lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + version "4.17.22" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.22.tgz#eb7d123ec2470d69b911abe34f85cb694849b346" + integrity sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q== lodash.camelcase@^4.3.0: version "4.3.0" @@ -5785,9 +5841,9 @@ lru-cache@^10.0.1: integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^11.0.0, lru-cache@^11.1.0, lru-cache@^11.2.1: - version "11.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.2.tgz#40fd37edffcfae4b2940379c0722dc6eeaa75f24" - integrity sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg== + version "11.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d" + integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== lru-cache@^5.1.1: version "5.1.1" @@ -5822,7 +5878,7 @@ make-asynchronous@^1.0.1: type-fest "^4.6.0" web-worker "1.2.0" -make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.2, make-fetch-happen@^15.0.3: +make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.1, make-fetch-happen@^15.0.3: version "15.0.3" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz#1578d72885f2b3f9e5daa120b36a14fc31a84610" integrity sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw== @@ -5964,9 +6020,9 @@ mdast-util-phrasing@^4.0.0: unist-util-is "^6.0.0" mdast-util-to-hast@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" - integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + version "13.2.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053" + integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -6343,11 +6399,6 @@ murmurhash-js@^1.0.0: resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== -mute-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" - integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== - mute-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-3.0.0.tgz#cd8014dd2acb72e1e91bb67c74f0019e620ba2d1" @@ -6423,13 +6474,6 @@ node-releases@^2.0.27: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== -nopt@^8.0.0, nopt@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.1.0.tgz#b11d38caf0f8643ce885818518064127f602eae3" - integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A== - dependencies: - abbrev "^3.0.0" - nopt@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-9.0.0.tgz#6bff0836b2964d24508b6b41b5a9a49c4f4a1f96" @@ -6456,21 +6500,14 @@ normalize-package-data@^8.0.0: validate-npm-package-license "^3.0.4" normalize-url@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.0.tgz#d33504f67970decf612946fd4880bc8c0983486d" - integrity sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w== - -npm-audit-report@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-6.0.0.tgz#0262e5e2b674fabf0ea47e900fc7384b83de0fbb" - integrity sha512-Ag6Y1irw/+CdSLqEEAn69T8JBgBThj5mw0vuFIKeP7hATYuQuS5jkMjK6xmVB8pr7U4g5Audbun0lHhBDMIBRA== + version "8.1.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.1.tgz#751a20c8520e5725404c06015fea21d7567f25ef" + integrity sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ== -npm-bundled@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-4.0.0.tgz#f5b983f053fe7c61566cf07241fab2d4e9d513d3" - integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== - dependencies: - npm-normalize-package-bin "^4.0.0" +npm-audit-report@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-7.0.0.tgz#c384ac4afede55f21b30778202ad568e54644c35" + integrity sha512-bluLL4xwGr/3PERYz50h2Upco0TJMDcLcymuFnfDWeGO99NqH724MNzhWi5sXXuXf2jbytFF0LyR8W+w1jTI6A== npm-bundled@^5.0.0: version "5.0.0" @@ -6486,11 +6523,6 @@ npm-install-checks@^8.0.0: dependencies: semver "^7.1.1" -npm-normalize-package-bin@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" - integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== - npm-normalize-package-bin@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz#2b207ff260f2e525ddce93356614e2f736728f89" @@ -6561,48 +6593,48 @@ npm-run-path@^6.0.0: path-key "^4.0.0" unicorn-magic "^0.3.0" -npm-user-validate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-3.0.0.tgz#9b1410796bf1f1d78297a8096328c55d3083f233" - integrity sha512-9xi0RdSmJ4mPYTC393VJPz1Sp8LyCx9cUnm/L9Qcb3cFO8gjT4mN20P9FAsea8qDHdQ7LtcN8VLh2UT47SdKCw== +npm-user-validate@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-4.0.0.tgz#f3c7e8360e46c651dbaf2fc4eea8f66df51ae6df" + integrity sha512-TP+Ziq/qPi/JRdhaEhnaiMkqfMGjhDLoh/oRfW+t5aCuIfJxIUxvwk6Sg/6ZJ069N/Be6gs00r+aZeJTfS9uHQ== npm@^11.6.2: - version "11.6.3" - resolved "https://registry.yarnpkg.com/npm/-/npm-11.6.3.tgz#3f581bca37cbdadf2be04346c0e5b0be96cdd54b" - integrity sha512-QIWnYxYuDjrNGaTp0jrTqgl45QHM+UfdcjPBKmia4LsBkHY8TvEjZpkAVrNO7EOJA//tOP3k+9cioXwqdAfukg== + version "11.7.0" + resolved "https://registry.yarnpkg.com/npm/-/npm-11.7.0.tgz#897fa4af764b64fa384b50e071636e7497d4f6de" + integrity sha512-wiCZpv/41bIobCoJ31NStIWKfAxxYyD1iYnWCtiyns8s5v3+l8y0HCP/sScuH6B5+GhIfda4HQKiqeGZwJWhFw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^9.1.7" - "@npmcli/config" "^10.4.3" - "@npmcli/fs" "^4.0.0" - "@npmcli/map-workspaces" "^5.0.1" + "@npmcli/arborist" "^9.1.9" + "@npmcli/config" "^10.4.5" + "@npmcli/fs" "^5.0.0" + "@npmcli/map-workspaces" "^5.0.3" "@npmcli/metavuln-calculator" "^9.0.3" - "@npmcli/package-json" "^7.0.2" + "@npmcli/package-json" "^7.0.4" "@npmcli/promise-spawn" "^9.0.1" "@npmcli/redact" "^4.0.0" "@npmcli/run-script" "^10.0.3" "@sigstore/tuf" "^4.0.0" abbrev "^4.0.0" archy "~1.0.0" - cacache "^20.0.2" + cacache "^20.0.3" chalk "^5.6.2" ci-info "^4.3.1" cli-columns "^4.0.0" fastest-levenshtein "^1.0.16" fs-minipass "^3.0.3" - glob "^11.0.3" + glob "^13.0.0" graceful-fs "^4.2.11" hosted-git-info "^9.0.2" ini "^6.0.0" - init-package-json "^8.2.3" + init-package-json "^8.2.4" is-cidr "^6.0.1" json-parse-even-better-errors "^5.0.0" libnpmaccess "^10.0.3" - libnpmdiff "^8.0.10" - libnpmexec "^10.1.9" - libnpmfund "^7.0.10" + libnpmdiff "^8.0.12" + libnpmexec "^10.1.11" + libnpmfund "^7.0.12" libnpmorg "^8.0.1" - libnpmpack "^9.0.10" + libnpmpack "^9.0.12" libnpmpublish "^11.1.3" libnpmsearch "^9.0.1" libnpmteam "^8.0.2" @@ -6614,19 +6646,19 @@ npm@^11.6.2: ms "^2.1.2" node-gyp "^12.1.0" nopt "^9.0.0" - npm-audit-report "^6.0.0" + npm-audit-report "^7.0.0" npm-install-checks "^8.0.0" npm-package-arg "^13.0.2" npm-pick-manifest "^11.0.3" npm-profile "^12.0.1" npm-registry-fetch "^19.1.1" - npm-user-validate "^3.0.0" - p-map "^7.0.3" + npm-user-validate "^4.0.0" + p-map "^7.0.4" pacote "^21.0.4" parse-conflict-json "^5.0.1" - proc-log "^6.0.0" + proc-log "^6.1.0" qrcode-terminal "^0.12.0" - read "^4.1.0" + read "^5.0.1" semver "^7.7.3" spdx-expression-parse "^4.0.0" ssri "^13.0.0" @@ -6660,6 +6692,20 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +oniguruma-parser@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz#82ba2208d7a2b69ee344b7efe0ae930c627dcc4a" + integrity sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w== + +oniguruma-to-es@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz#0b909d960faeb84511c979b1f2af64e9bc37ce34" + integrity sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA== + dependencies: + oniguruma-parser "^0.12.1" + regex "^6.0.1" + regex-recursion "^6.0.2" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -6724,7 +6770,7 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^7.0.1, p-map@^7.0.2, p-map@^7.0.3: +p-map@^7.0.1, p-map@^7.0.2, p-map@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== @@ -6744,11 +6790,6 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - pacote@^21.0.0, pacote@^21.0.2, pacote@^21.0.4: version "21.0.4" resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.0.4.tgz#59cd2a2b5a4c8c1b625f33991a96b136d1c05d95" @@ -7002,9 +7043,9 @@ point-in-polygon-hao@^1.1.0: robust-predicates "^3.0.2" postcss-selector-parser@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" - integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -7024,9 +7065,9 @@ potpack@^2.1.0: integrity sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ== preact@^10.17.0: - version "10.27.2" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.27.2.tgz#19b9009c1be801a76a0aaf0fe5ba665985a09312" - integrity sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg== + version "10.28.2" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.28.2.tgz#4b668383afa4b4a2546bbe4bd1747e02e2360138" + integrity sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA== prelude-ls@^1.2.1: version "1.2.1" @@ -7045,25 +7086,20 @@ pretty-ms@^9.2.0: dependencies: parse-ms "^4.0.0" -proc-log@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" - integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== - -proc-log@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.0.0.tgz#a75b516bc4437b1e07df6771450588f57a0a6548" - integrity sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA== +proc-log@^6.0.0, proc-log@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215" + integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -proggy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proggy/-/proggy-3.0.0.tgz#874e91fed27fe00a511758e83216a6b65148bd6c" - integrity sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q== +proggy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/proggy/-/proggy-4.0.0.tgz#85fa89d7c81bc3fb77992a80f47bb1e17c610fa3" + integrity sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ== proj4@^2.20.2, proj4@^2.9.2: version "2.20.2" @@ -7293,13 +7329,6 @@ read-pkg@^9.0.0: type-fest "^4.6.0" unicorn-magic "^0.1.0" -read@^4.0.0, read@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/read/-/read-4.1.0.tgz#d97c2556b009b47b16b5bb82311d477cc7503548" - integrity sha512-uRfX6K+f+R8OOrYScaM3ixPY4erg69f8DN6pgTvMcA9iRc8iDhwrA4m3Yu8YYKsXJgVvum+m8PkRboZwwuLzYA== - dependencies: - mute-stream "^2.0.0" - read@^5.0.0, read@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/read/-/read-5.0.1.tgz#e6b0a84743406182fdfc20b2418a11b39b7ef837" @@ -7320,6 +7349,25 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +regex-recursion@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-6.0.2.tgz#a0b1977a74c87f073377b938dbedfab2ea582b33" + integrity sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg== + dependencies: + regex-utilities "^2.3.0" + +regex-utilities@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280" + integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== + +regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/regex/-/regex-6.1.0.tgz#d7ce98f8ee32da7497c13f6601fca2bc4a6a7803" + integrity sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg== + dependencies: + regex-utilities "^2.3.0" + registry-auth-token@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" @@ -7390,34 +7438,37 @@ robust-predicates@^3.0.2: integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== rollup@^4.43.0: - version "4.53.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.2.tgz#98e73ee51e119cb9d88b07d026c959522416420a" - integrity sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g== + version "4.55.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.55.1.tgz#4ec182828be440648e7ee6520dc35e9f20e05144" + integrity sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.53.2" - "@rollup/rollup-android-arm64" "4.53.2" - "@rollup/rollup-darwin-arm64" "4.53.2" - "@rollup/rollup-darwin-x64" "4.53.2" - "@rollup/rollup-freebsd-arm64" "4.53.2" - "@rollup/rollup-freebsd-x64" "4.53.2" - "@rollup/rollup-linux-arm-gnueabihf" "4.53.2" - "@rollup/rollup-linux-arm-musleabihf" "4.53.2" - "@rollup/rollup-linux-arm64-gnu" "4.53.2" - "@rollup/rollup-linux-arm64-musl" "4.53.2" - "@rollup/rollup-linux-loong64-gnu" "4.53.2" - "@rollup/rollup-linux-ppc64-gnu" "4.53.2" - "@rollup/rollup-linux-riscv64-gnu" "4.53.2" - "@rollup/rollup-linux-riscv64-musl" "4.53.2" - "@rollup/rollup-linux-s390x-gnu" "4.53.2" - "@rollup/rollup-linux-x64-gnu" "4.53.2" - "@rollup/rollup-linux-x64-musl" "4.53.2" - "@rollup/rollup-openharmony-arm64" "4.53.2" - "@rollup/rollup-win32-arm64-msvc" "4.53.2" - "@rollup/rollup-win32-ia32-msvc" "4.53.2" - "@rollup/rollup-win32-x64-gnu" "4.53.2" - "@rollup/rollup-win32-x64-msvc" "4.53.2" + "@rollup/rollup-android-arm-eabi" "4.55.1" + "@rollup/rollup-android-arm64" "4.55.1" + "@rollup/rollup-darwin-arm64" "4.55.1" + "@rollup/rollup-darwin-x64" "4.55.1" + "@rollup/rollup-freebsd-arm64" "4.55.1" + "@rollup/rollup-freebsd-x64" "4.55.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.55.1" + "@rollup/rollup-linux-arm-musleabihf" "4.55.1" + "@rollup/rollup-linux-arm64-gnu" "4.55.1" + "@rollup/rollup-linux-arm64-musl" "4.55.1" + "@rollup/rollup-linux-loong64-gnu" "4.55.1" + "@rollup/rollup-linux-loong64-musl" "4.55.1" + "@rollup/rollup-linux-ppc64-gnu" "4.55.1" + "@rollup/rollup-linux-ppc64-musl" "4.55.1" + "@rollup/rollup-linux-riscv64-gnu" "4.55.1" + "@rollup/rollup-linux-riscv64-musl" "4.55.1" + "@rollup/rollup-linux-s390x-gnu" "4.55.1" + "@rollup/rollup-linux-x64-gnu" "4.55.1" + "@rollup/rollup-linux-x64-musl" "4.55.1" + "@rollup/rollup-openbsd-x64" "4.55.1" + "@rollup/rollup-openharmony-arm64" "4.55.1" + "@rollup/rollup-win32-arm64-msvc" "4.55.1" + "@rollup/rollup-win32-ia32-msvc" "4.55.1" + "@rollup/rollup-win32-x64-gnu" "4.55.1" + "@rollup/rollup-win32-x64-msvc" "4.55.1" fsevents "~2.3.2" rw@^1.3.3: @@ -7524,6 +7575,20 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shiki@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-3.21.0.tgz#64686fe6bfc6b2b602d209eb6c8cdbc79d0eff22" + integrity sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w== + dependencies: + "@shikijs/core" "3.21.0" + "@shikijs/engine-javascript" "3.21.0" + "@shikijs/engine-oniguruma" "3.21.0" + "@shikijs/langs" "3.21.0" + "@shikijs/themes" "3.21.0" + "@shikijs/types" "3.21.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + siginfo@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" @@ -7544,16 +7609,16 @@ signale@^1.2.1: pkg-conf "^2.1.0" sigstore@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-4.0.0.tgz#cc260814a95a6027c5da24b819d5c11334af60f9" - integrity sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q== + version "4.1.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-4.1.0.tgz#d34b92a544a05e003a2430209d26d8dfafd805a0" + integrity sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA== dependencies: "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.0.0" + "@sigstore/core" "^3.1.0" "@sigstore/protobuf-specs" "^0.5.0" - "@sigstore/sign" "^4.0.0" - "@sigstore/tuf" "^4.0.0" - "@sigstore/verify" "^3.0.0" + "@sigstore/sign" "^4.1.0" + "@sigstore/tuf" "^4.0.1" + "@sigstore/verify" "^3.1.0" sirv@^3.0.2: version "3.0.2" @@ -7733,15 +7798,6 @@ stream-combiner2@~1.1.1: duplexer2 "~0.1.0" readable-stream "^2.0.2" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -7751,15 +7807,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string-width@^7.0.0, string-width@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" @@ -7784,13 +7831,6 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -7798,7 +7838,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1, strip-ansi@^7.1.0: +strip-ansi@^7.1.0: version "7.1.2" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== @@ -8094,14 +8134,14 @@ tslib@^2.6.2, tslib@^2.8.0, tslib@^2.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tuf-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-4.0.0.tgz#dbfc7df8b4e04fd6a0c598678a8c789a3e5f9c27" - integrity sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg== +tuf-js@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-4.1.0.tgz#ae4ef9afa456fcb4af103dc50a43bc031f066603" + integrity sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ== dependencies: - "@tufjs/models" "4.0.0" - debug "^4.4.1" - make-fetch-happen "^15.0.0" + "@tufjs/models" "4.1.0" + debug "^4.4.3" + make-fetch-happen "^15.0.1" tunnel@^0.0.6: version "0.0.6" @@ -8131,9 +8171,9 @@ type-fest@^4.39.1, type-fest@^4.6.0: integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== type-fest@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.2.0.tgz#7dd671273eb6bcba71af0babe303e8dbab60f795" - integrity sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA== + version "5.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.4.1.tgz#aa9eaadcdc0acb0b5bd52e54f966ee3e38e125d2" + integrity sha512-xygQcmneDyzsEuKZrFbRMne5HDqMs++aFzefrJTgEIKjQ3rekM+RPfFCVq2Gp1VIDqddoYeppCj4Pcb+RZW0GQ== dependencies: tagged-tag "^1.0.0" @@ -8189,7 +8229,7 @@ undici-types@~7.16.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== -undici@^5.25.4: +undici@^5.28.5: version "5.29.0" resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== @@ -8197,9 +8237,9 @@ undici@^5.25.4: "@fastify/busboy" "^2.0.0" undici@^7.0.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-7.16.0.tgz#cb2a1e957726d458b536e3f076bf51f066901c1a" - integrity sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g== + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-7.18.2.tgz#6cf724ef799a67d94fd55adf66b1e184176efcdf" + integrity sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw== unicode-emoji-modifier-base@^1.0.0: version "1.0.0" @@ -8308,10 +8348,10 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -update-browserslist-db@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" - integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -8352,9 +8392,9 @@ validate-npm-package-license@^3.0.4: spdx-expression-parse "^3.0.0" validate-npm-package-name@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-7.0.0.tgz#3b4fe12b4abfb8b0be010d0e75b1fe2b52295bc6" - integrity sha512-bwVk/OK+Qu108aJcMAEiU4yavHUI7aN20TgZNBj9MR2iU1zPUl1Z1Otr7771ExfYTPTvfN8ZJ1pbr5Iklgt4xg== + version "7.0.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz#e57c3d721a4c8bbff454a246e7f7da811559ea0d" + integrity sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A== vfile-message@^4.0.0: version "4.0.3" @@ -8504,15 +8544,6 @@ wordwrapjs@^5.1.0: resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-5.1.1.tgz#bfd1eb426f0f7eec73b7df32cf7df1f618bfb3a9" integrity sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -8522,15 +8553,6 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - wrap-ansi@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" @@ -8549,9 +8571,9 @@ write-file-atomic@^7.0.0: signal-exit "^4.0.1" ws@^8.18.3: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== xml-utils@^1.0.2: version "1.10.2" @@ -8639,9 +8661,9 @@ yoctocolors@^2.1.1: integrity sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ== "zod@^3.25.0 || ^4.0.0": - version "4.1.13" - resolved "https://registry.yarnpkg.com/zod/-/zod-4.1.13.tgz#93699a8afe937ba96badbb0ce8be6033c0a4b6b1" - integrity sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig== + version "4.3.5" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.5.tgz#aeb269a6f9fc259b1212c348c7c5432aaa474d2a" + integrity sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g== zstd-codec@^0.1: version "0.1.5" @@ -8653,7 +8675,12 @@ zstddec@^0.1.0: resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.1.0.tgz#7050f3f0e0c3978562d0c566b3e5a427d2bad7ec" integrity sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg== -zwitch@^2.0.0: +zustand@^5.0.10: + version "5.0.10" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-5.0.10.tgz#4db510c0c4c25a5f1ae43227b307ddf1641a3210" + integrity sha512-U1AiltS1O9hSy3rul+Ub82ut2fqIAefiSuwECWt6jlMVUGejvf+5omLcRBSzqbRagSM3hQZbtzdeRc6QVScXTg== + +zwitch@^2.0.0, zwitch@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==