diff --git a/components/brain/my-stream/MyStreamWave.tsx b/components/brain/my-stream/MyStreamWave.tsx index 689296dac0..c7902be998 100644 --- a/components/brain/my-stream/MyStreamWave.tsx +++ b/components/brain/my-stream/MyStreamWave.tsx @@ -17,6 +17,7 @@ import MyStreamWaveFAQ from "./MyStreamWaveFAQ"; import { useMyStream } from "@/contexts/wave/MyStreamContext"; import { createBreakpoint } from "react-use"; import { getHomeFeedRoute } from "@/helpers/navigation.helpers"; +import { WaveChatScrollProvider } from "@/contexts/wave/WaveChatScrollContext"; interface MyStreamWaveProps { readonly waveId: string; @@ -95,20 +96,22 @@ const MyStreamWave: React.FC = ({ waveId }) => { }; return ( -
- {/* Always render tab container (hidden on app inside MyStreamWaveTabs) */} - - +
- {components[activeContentTab]} + className="tailwind-scope tw-relative tw-flex tw-flex-col tw-h-full" + key={stableWaveKey}> + {/* Always render tab container (hidden on app inside MyStreamWaveTabs) */} + + +
+ {components[activeContentTab]} +
-
+ ); }; diff --git a/components/brain/my-stream/MyStreamWaveChat.tsx b/components/brain/my-stream/MyStreamWaveChat.tsx index 79e48f269c..dcc8b9dabf 100644 --- a/components/brain/my-stream/MyStreamWaveChat.tsx +++ b/components/brain/my-stream/MyStreamWaveChat.tsx @@ -31,7 +31,6 @@ const MyStreamWaveChat: React.FC = ({ wave }) => { const pathname = usePathname(); const containerRef = useRef(null); const [initialDrop, setInitialDrop] = useState(null); - const [searchParamsDone, setSearchParamsDone] = useState(false); const { isMemesWave } = useWave(wave); const editingDropId = useSelector(selectEditingDropId); const { isApp } = useDeviceInfo(); @@ -40,18 +39,24 @@ const MyStreamWaveChat: React.FC = ({ wave }) => { // Handle URL parameters useEffect(() => { const dropParam = searchParams?.get("serialNo"); - if (dropParam) { - setInitialDrop(parseInt(dropParam)); - const params = new URLSearchParams(searchParams?.toString() || ''); - params.delete("serialNo"); - const href = params.toString() - ? `${pathname}?${params.toString()}` - : (pathname || getHomeFeedRoute()); - router.replace(href, { scroll: false }); - } else { + if (!dropParam) { setInitialDrop(null); + return; } - setSearchParamsDone(true); + + const parsed = Number.parseInt(dropParam, 10); + if (!Number.isFinite(parsed)) { + return; + } + + setInitialDrop(parsed); + + const params = new URLSearchParams(searchParams?.toString() || ""); + params.delete("serialNo"); + const href = params.toString() + ? `${pathname}?${params.toString()}` + : pathname || getHomeFeedRoute(); + router.replace(href, { scroll: false }); }, [searchParams, router, pathname]); const { waveViewStyle } = useLayout(); @@ -99,9 +104,6 @@ const MyStreamWaveChat: React.FC = ({ wave }) => { setActiveDrop(null); }; - if (!searchParamsDone) { - return null; - } return (
= ({ const pathname = usePathname(); const breakpoint = useBreakpoint(); const isMobile = breakpoint === "S"; + const [isSearchOpen, setIsSearchOpen] = useState(false); + const waveChatScroll = useWaveChatScrollOptional(); const handleMobileBack = () => { const params = new URLSearchParams(searchParams?.toString() || ""); @@ -37,10 +43,22 @@ const MyStreamWaveTabsDefault: React.FC = ({ router.push(newUrl, { scroll: false }); }; + const handleSearchSelect = (serialNo: number) => { + setActiveContentTab(MyStreamWaveTab.CHAT); + if (waveChatScroll) { + waveChatScroll.requestScrollToSerialNo({ waveId: wave.id, serialNo }); + return; + } + + const params = new URLSearchParams(searchParams?.toString() || ""); + params.set("serialNo", String(serialNo)); + router.replace(`${pathname}?${params.toString()}`, { scroll: false }); + }; + return (
-
+
{isMobile && ( )} -
- ({ - pfp: c.contributor_pfp, - }))} - /> -
-

- {wave.name} -

+ {isMobile ? ( + + ) : ( + <> +
+ ({ + pfp: c.contributor_pfp, + }))} + /> +
+

+ {wave.name} +

+ + + )}
+ setIsSearchOpen(false)} + wave={wave} + onSelectSerialNo={handleSearchSelect} + />
); }; diff --git a/components/brain/my-stream/tabs/MyStreamWaveTabsMeme.tsx b/components/brain/my-stream/tabs/MyStreamWaveTabsMeme.tsx index 20ff02f705..b0686a88b2 100644 --- a/components/brain/my-stream/tabs/MyStreamWaveTabsMeme.tsx +++ b/components/brain/my-stream/tabs/MyStreamWaveTabsMeme.tsx @@ -18,10 +18,14 @@ import { useSidebarState } from "../../../../hooks/useSidebarState"; import { ChevronDoubleLeftIcon, ArrowLeftIcon, + MagnifyingGlassIcon, } from "@heroicons/react/24/outline"; import WavePicture from "../../../waves/WavePicture"; import { useRouter, useSearchParams, usePathname } from "next/navigation"; import { createBreakpoint } from "react-use"; +import WaveDropsSearchModal from "@/components/waves/drops/search/WaveDropsSearchModal"; +import { MyStreamWaveTab } from "@/types/waves.types"; +import { useWaveChatScrollOptional } from "@/contexts/wave/WaveChatScrollContext"; const useBreakpoint = createBreakpoint({ LG: 1024, S: 0 }); @@ -41,6 +45,8 @@ const MyStreamWaveTabsMeme: React.FC = ({ const pathname = usePathname(); const breakpoint = useBreakpoint(); const isMobile = breakpoint === "S"; + const [isSearchOpen, setIsSearchOpen] = useState(false); + const waveChatScroll = useWaveChatScrollOptional(); const { isMemesWave, @@ -104,12 +110,24 @@ const MyStreamWaveTabsMeme: React.FC = ({ router.push(newUrl, { scroll: false }); }; + const handleSearchSelect = (serialNo: number) => { + setActiveContentTab(MyStreamWaveTab.CHAT); + if (waveChatScroll) { + waveChatScroll.requestScrollToSerialNo({ waveId: wave.id, serialNo }); + return; + } + + const params = new URLSearchParams(searchParams?.toString() || ""); + params.set("serialNo", String(serialNo)); + router.replace(`${pathname}?${params.toString()}`, { scroll: false }); + }; + return ( <> {" "}
-
+
{isMobile && ( )} -
- ({ - pfp: c.contributor_pfp, - }))} - /> -
-

- {wave.name} -

+ {isMobile ? ( + + ) : ( + <> +
+ ({ + pfp: c.contributor_pfp, + }))} + /> +
+

+ {wave.name} +

+ + + )}
@@ -175,6 +225,12 @@ const MyStreamWaveTabsMeme: React.FC = ({ wave={wave} onClose={() => setIsMemesModalOpen(false)} /> + setIsSearchOpen(false)} + wave={wave} + onSelectSerialNo={handleSearchSelect} + /> ); }; diff --git a/components/waves/drops/search/WaveDropsSearchModal.tsx b/components/waves/drops/search/WaveDropsSearchModal.tsx new file mode 100644 index 0000000000..9ea04e4465 --- /dev/null +++ b/components/waves/drops/search/WaveDropsSearchModal.tsx @@ -0,0 +1,271 @@ +"use client"; + +import { ApiWave } from "@/generated/models/ApiWave"; +import { useWaveDropsSearch } from "@/hooks/useWaveDropsSearch"; +import { ChevronLeftIcon, XMarkIcon } from "@heroicons/react/24/outline"; +import { FocusTrap } from "focus-trap-react"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { createPortal } from "react-dom"; +import { useClickAway, useDebounce, useKeyPressEvent } from "react-use"; +import Drop, { DropLocation } from "../Drop"; + +const MIN_QUERY_LENGTH = 2; + +const normalize = (value: string) => value.trim(); + +export default function WaveDropsSearchModal({ + isOpen, + onClose, + wave, + onSelectSerialNo, +}: { + readonly isOpen: boolean; + readonly onClose: () => void; + readonly wave: ApiWave; + readonly onSelectSerialNo: (serialNo: number) => void; +}) { + const modalRef = useRef(null); + useClickAway(modalRef, () => { + if (isOpen) onClose(); + }); + useKeyPressEvent("Escape", () => { + if (isOpen) onClose(); + }); + + const [query, setQuery] = useState(""); + const [debouncedQuery, setDebouncedQuery] = useState(""); + useDebounce( + () => setDebouncedQuery(query), + 250, + [query] + ); + + useEffect(() => { + if (!isOpen) { + setQuery(""); + setDebouncedQuery(""); + } + }, [isOpen]); + + const normalizedQuery = useMemo( + () => normalize(debouncedQuery), + [debouncedQuery] + ); + + const meetsMinLength = normalizedQuery.length >= MIN_QUERY_LENGTH; + + const { + drops: results, + isLoading, + isError, + hasNextPage, + fetchNextPage, + isFetchingNextPage, + } = useWaveDropsSearch({ + wave, + term: normalizedQuery, + enabled: isOpen && meetsMinLength, + size: 50, + }); + + const inputRef = useRef(null); + useEffect(() => { + if (!isOpen) return; + const timer = window.setTimeout(() => inputRef.current?.focus(), 0); + return () => window.clearTimeout(timer); + }, [isOpen]); + + if (!isOpen || typeof document === "undefined") { + return null; + } + + return createPortal( + + (modalRef.current as HTMLElement | null) ?? + (inputRef.current as HTMLElement | null) ?? + document.body, + initialFocus: () => + (inputRef.current as HTMLElement | null) ?? + (modalRef.current as HTMLElement | null) ?? + document.body, + }} + > +
+
+
+
+
+
+ + +
+
+ Search in +
+
+ {wave.name} +
+
+ + +
+ +
+
+ + + setQuery(e.target.value)} + className="tw-form-input tw-block tw-w-full tw-rounded-lg tw-border-0 tw-py-3 tw-pl-11 tw-pr-10 tw-bg-iron-900 tw-text-iron-50 tw-font-normal tw-caret-primary-300 tw-shadow-sm tw-ring-1 tw-ring-inset tw-ring-iron-700 hover:tw-ring-iron-600 placeholder:tw-text-iron-500 focus:tw-outline-none focus:tw-bg-transparent focus:tw-ring-1 focus:tw-ring-inset focus:tw-ring-primary-300 tw-text-base sm:text-sm tw-transition tw-duration-300 tw-ease-out" + placeholder="Search messages" + /> + {query.length > 0 && ( + + )} +
+
+ +
+ {isLoading && ( +
+ Loading… +
+ )} + + {!isLoading && isError && ( +
+ Couldn’t load drops for search. +
+ )} + + {!isLoading && !isError && !meetsMinLength && ( +
+ Type at least {MIN_QUERY_LENGTH} characters to search. +
+ )} + + {!isLoading && + !isError && + meetsMinLength && + results.length === 0 && ( +
+ No matches found. +
+ )} + + {!isLoading && + !isError && + meetsMinLength && + results.length > 0 && ( +
+
+ {results.length} result{results.length === 1 ? "" : "s"} +
+
+ {results.map((drop, index) => { + const previousDrop = results[index - 1] ?? null; + const nextDrop = results[index + 1] ?? null; + const serialNo = drop.serial_no; + const canSelect = typeof serialNo === "number"; + return ( + + ); + })} +
+ {hasNextPage && ( +
+ +
+ )} +
+ )} +
+
+
+
+
+ , + document.body + ); +} diff --git a/components/waves/drops/wave-drops-all/index.tsx b/components/waves/drops/wave-drops-all/index.tsx index 54e9d8a97e..060c471fdb 100644 --- a/components/waves/drops/wave-drops-all/index.tsx +++ b/components/waves/drops/wave-drops-all/index.tsx @@ -18,6 +18,7 @@ import { useWaveDropsNotificationRead } from "./hooks/useWaveDropsNotificationRe import { useWaveDropsSerialScroll } from "./hooks/useWaveDropsSerialScroll"; import { useWaveDropsClipboard } from "./hooks/useWaveDropsClipboard"; import { WaveDropsContent } from "./subcomponents/WaveDropsContent"; +import { useWaveChatScrollOptional } from "@/contexts/wave/WaveChatScrollContext"; const EMPTY_DROPS: Drop[] = []; @@ -183,6 +184,15 @@ const WaveDropsAll: React.FC = ({ scrollToVisualBottom, }); + const waveChatScroll = useWaveChatScrollOptional(); + useEffect(() => { + if (!waveChatScroll) return; + return waveChatScroll.registerScrollHandler({ + waveId, + handler: queueSerialTarget, + }); + }, [waveChatScroll, waveId, queueSerialTarget]); + const revealPendingDrops = useCallback(() => { if (!waveMessages?.drops?.length) { return; diff --git a/contexts/wave/WaveChatScrollContext.tsx b/contexts/wave/WaveChatScrollContext.tsx new file mode 100644 index 0000000000..ae3f6c4ea3 --- /dev/null +++ b/contexts/wave/WaveChatScrollContext.tsx @@ -0,0 +1,85 @@ +"use client"; + +import { createContext, useCallback, useContext, useMemo, useRef } from "react"; + +type ScrollHandler = (serialNo: number) => void; + +interface ScrollRequest { + readonly waveId: string; + readonly serialNo: number; +} + +interface RegisteredHandler { + readonly waveId: string; + readonly handler: ScrollHandler; +} + +interface WaveChatScrollContextValue { + readonly requestScrollToSerialNo: (request: ScrollRequest) => void; + readonly registerScrollHandler: (registration: RegisteredHandler) => () => void; +} + +const WaveChatScrollContext = createContext( + null +); + +export function WaveChatScrollProvider({ + children, +}: { + readonly children: React.ReactNode; +}) { + const registeredHandlerRef = useRef(null); + const pendingRequestRef = useRef(null); + + const requestScrollToSerialNo = useCallback((request: ScrollRequest) => { + const registered = registeredHandlerRef.current; + if (registered && registered.waveId === request.waveId) { + registered.handler(request.serialNo); + return; + } + pendingRequestRef.current = request; + }, []); + + const registerScrollHandler = useCallback( + (registration: RegisteredHandler) => { + registeredHandlerRef.current = registration; + + const pending = pendingRequestRef.current; + if (pending && pending.waveId === registration.waveId) { + pendingRequestRef.current = null; + registration.handler(pending.serialNo); + } + + return () => { + const current = registeredHandlerRef.current; + if ( + current && + current.waveId === registration.waveId && + current.handler === registration.handler + ) { + registeredHandlerRef.current = null; + } + }; + }, + [] + ); + + const value = useMemo( + () => ({ + requestScrollToSerialNo, + registerScrollHandler, + }), + [requestScrollToSerialNo, registerScrollHandler] + ); + + return ( + + {children} + + ); +} + +export function useWaveChatScrollOptional() { + return useContext(WaveChatScrollContext); +} + diff --git a/generated/models/ApiDropWithoutWavesPageWithoutCount.ts b/generated/models/ApiDropWithoutWavesPageWithoutCount.ts new file mode 100644 index 0000000000..24a866c6da --- /dev/null +++ b/generated/models/ApiDropWithoutWavesPageWithoutCount.ts @@ -0,0 +1,51 @@ +/** + * 6529.io API + * This is the API interface description. Brief terminology overview and an authentication example can be found at https://6529.io/about/api. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { ApiDropWithoutWave } from '../models/ApiDropWithoutWave'; +import { HttpFile } from '../http/http'; + +export class ApiDropWithoutWavesPageWithoutCount { + 'data': Array; + 'page': number; + 'next': boolean; + + static readonly discriminator: string | undefined = undefined; + + static readonly mapping: {[index: string]: string} | undefined = undefined; + + static readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [ + { + "name": "data", + "baseName": "data", + "type": "Array", + "format": "" + }, + { + "name": "page", + "baseName": "page", + "type": "number", + "format": "int64" + }, + { + "name": "next", + "baseName": "next", + "type": "boolean", + "format": "" + } ]; + + static getAttributeTypeMap() { + return ApiDropWithoutWavesPageWithoutCount.attributeTypeMap; + } + + public constructor() { + } +} diff --git a/generated/models/ObjectSerializer.ts b/generated/models/ObjectSerializer.ts index e907253e60..a323e1ac84 100644 --- a/generated/models/ObjectSerializer.ts +++ b/generated/models/ObjectSerializer.ts @@ -65,6 +65,7 @@ export * from '../models/ApiDropType'; export * from '../models/ApiDropVote'; export * from '../models/ApiDropWinningContext'; export * from '../models/ApiDropWithoutWave'; +export * from '../models/ApiDropWithoutWavesPageWithoutCount'; export * from '../models/ApiDropsLeaderboardPage'; export * from '../models/ApiDropsPage'; export * from '../models/ApiFeedItem'; @@ -261,6 +262,7 @@ import { ApiDropType } from '../models/ApiDropType'; import { ApiDropVote } from '../models/ApiDropVote'; import { ApiDropWinningContext } from '../models/ApiDropWinningContext'; import { ApiDropWithoutWave } from '../models/ApiDropWithoutWave'; +import { ApiDropWithoutWavesPageWithoutCount } from '../models/ApiDropWithoutWavesPageWithoutCount'; import { ApiDropsLeaderboardPage } from '../models/ApiDropsLeaderboardPage'; import { ApiDropsPage } from '../models/ApiDropsPage'; import { ApiFeedItem } from '../models/ApiFeedItem'; @@ -499,6 +501,7 @@ let typeMap: {[index: string]: any} = { "ApiDropVote": ApiDropVote, "ApiDropWinningContext": ApiDropWinningContext, "ApiDropWithoutWave": ApiDropWithoutWave, + "ApiDropWithoutWavesPageWithoutCount": ApiDropWithoutWavesPageWithoutCount, "ApiDropsLeaderboardPage": ApiDropsLeaderboardPage, "ApiDropsPage": ApiDropsPage, "ApiFeedItem": ApiFeedItem, diff --git a/hooks/useWaveDropsSearch.ts b/hooks/useWaveDropsSearch.ts new file mode 100644 index 0000000000..8127837e1d --- /dev/null +++ b/hooks/useWaveDropsSearch.ts @@ -0,0 +1,85 @@ +"use client"; + +import { QueryKey } from "@/components/react-query-wrapper/ReactQueryWrapper"; +import { ApiDropWithoutWavesPageWithoutCount } from "@/generated/models/ApiDropWithoutWavesPageWithoutCount"; +import { ApiWave } from "@/generated/models/ApiWave"; +import { ApiWaveMin } from "@/generated/models/ApiWaveMin"; +import type { ExtendedDrop } from "@/helpers/waves/drop.helpers"; +import { generateUniqueKeys, mapToExtendedDrops } from "@/helpers/waves/wave-drops.helpers"; +import { commonApiFetch } from "@/services/api/common-api"; +import { useInfiniteQuery } from "@tanstack/react-query"; +import { useMemo } from "react"; + +const toWaveMin = (wave: ApiWave): ApiWaveMin => { + return { + id: wave.id, + name: wave.name, + picture: wave.picture, + description_drop_id: wave.description_drop?.id ?? "", + authenticated_user_eligible_to_vote: wave.voting.authenticated_user_eligible, + authenticated_user_eligible_to_participate: + wave.participation.authenticated_user_eligible, + authenticated_user_eligible_to_chat: wave.chat.authenticated_user_eligible, + authenticated_user_admin: wave.wave.authenticated_user_eligible_for_admin, + visibility_group_id: wave.visibility.scope.group?.id ?? null, + participation_group_id: wave.participation.scope.group?.id ?? null, + chat_group_id: wave.chat.scope.group?.id ?? null, + voting_group_id: wave.voting.scope.group?.id ?? null, + admin_group_id: wave.wave.admin_group.group?.id ?? null, + voting_period_start: wave.voting.period?.min ?? null, + voting_period_end: wave.voting.period?.max ?? null, + voting_credit_type: wave.voting.credit_type, + admin_drop_deletion_enabled: wave.wave.admin_drop_deletion_enabled, + forbid_negative_votes: wave.voting.forbid_negative_votes, + pinned: wave.pinned, + }; +}; + +export function useWaveDropsSearch({ + wave, + term, + enabled, + size = 50, +}: { + readonly wave: ApiWave; + readonly term: string; + readonly enabled: boolean; + readonly size?: number; +}) { + const trimmedTerm = term.trim(); + const waveMin = useMemo(() => toWaveMin(wave), [wave]); + + const query = useInfiniteQuery({ + queryKey: [ + QueryKey.DROPS, + { waveId: wave.id, term: trimmedTerm, size, context: "wave-search" }, + ], + enabled: enabled && trimmedTerm.length > 0, + initialPageParam: 1, + queryFn: async ({ pageParam }) => { + return await commonApiFetch({ + endpoint: `waves/${wave.id}/search`, + params: { + term: trimmedTerm, + page: String(pageParam), + size: String(size), + }, + }); + }, + getNextPageParam: (lastPage) => + lastPage.next ? lastPage.page + 1 : undefined, + staleTime: 30_000, + }); + + const drops = useMemo(() => { + const all = query.data?.pages.flatMap((page) => page.data) ?? []; + if (all.length === 0) return []; + const mapped = mapToExtendedDrops([{ wave: waveMin, drops: all }], [], false); + return generateUniqueKeys(mapped, []); + }, [query.data?.pages, waveMin]); + + return { + ...query, + drops, + }; +} diff --git a/openapi.yaml b/openapi.yaml index 59cd625d79..aa84338600 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -2617,6 +2617,49 @@ paths: $ref: "#/components/schemas/ApiWave" "404": description: Wave or pause not found + /waves/{waveId}/search: + get: + tags: + - Waves + summary: Search for drops in wave by content + operationId: searchDropsInWave + parameters: + - name: waveId + in: path + required: true + schema: + type: string + - name: term + in: query + required: true + schema: + type: string + - name: page + in: query + required: false + schema: + type: number + format: int64 + minimum: 1 + default: 1 + - name: size + in: query + required: false + schema: + type: number + format: int64 + maximum: 100 + minimum: 1 + default: 20 + responses: + "200": + description: successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/ApiDropWithoutWavesPageWithoutCount" + "404": + description: Wave not found /wave-media/prep: post: tags: @@ -5238,6 +5281,17 @@ components: type: array items: $ref: "#/components/schemas/ApiDropReaction" + ApiDropWithoutWavesPageWithoutCount: + type: object + required: + - data + allOf: + - $ref: "#/components/schemas/ApiPageWithoutCount" + properties: + data: + type: array + items: + $ref: "#/components/schemas/ApiDropWithoutWave" ApiFeedItem: type: object required: diff --git a/package-lock.json b/package-lock.json index ede8ea62d7..481101e5ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -334,7 +334,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -970,7 +969,6 @@ "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.1.tgz", "integrity": "sha512-0ap4FzPJItaeg3QiiS1WguPNHY2aD67fQ9wr7DojCRzTFuNXQPvFB6lBkqlrVeQyJ9jCw0KV/LXv25oXjDcsyA==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -1054,7 +1052,6 @@ "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.3.6.tgz", "integrity": "sha512-4q8BNG1ViL4mSAAvPAtpwlOs1gpC+67eQtgIwNvT3xyeyFFd+guwkc8bcX5rTmQhXpqnhzC4f0obACbP9CqMSA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@noble/hashes": "1.4.0", "clsx": "1.2.1", @@ -1906,7 +1903,6 @@ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", "license": "MIT", - "peer": true, "dependencies": { "@fortawesome/fontawesome-common-types": "6.7.2" }, @@ -1956,7 +1952,6 @@ "resolved": "https://registry.npmjs.org/@gemini-wallet/core/-/core-0.3.2.tgz", "integrity": "sha512-Z4aHi3ECFf5oWYWM3F1rW83GJfB9OvhBYPTmb5q+VyK3uvzvS48lwo+jwh2eOoCRWEuT/crpb9Vwp2QaS5JqgQ==", "license": "MIT", - "peer": true, "dependencies": { "@metamask/rpc-errors": "7.0.2", "eventemitter3": "5.0.1" @@ -3851,6 +3846,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -4613,7 +4609,6 @@ "version": "0.33.1", "resolved": "https://registry.npmjs.org/@metamask/sdk/-/sdk-0.33.1.tgz", "integrity": "sha512-1mcOQVGr9rSrVcbKPNVzbZ8eCl1K0FATsYH3WJ/MH4WcZDWGECWrXJPNMZoEAkLxWiMe8jOQBumg2pmcDa9zpQ==", - "peer": true, "dependencies": { "@babel/runtime": "^7.26.0", "@metamask/onboarding": "^1.0.1", @@ -4679,7 +4674,6 @@ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "license": "MIT", - "peer": true, "dependencies": { "node-fetch": "^2.7.0" } @@ -4851,7 +4845,6 @@ "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.9.tgz", "integrity": "sha512-zDntUTReRbAThIfSp3dQZ9kKqI+LjgLp5YZN5c1bgNRDuoeLySAoZg46Bg1a+uV8TMgIRziHocglKGNzr6l+bQ==", "license": "MIT", - "peer": true, "dependencies": { "file-type": "21.1.0", "iterare": "1.2.1", @@ -5068,7 +5061,6 @@ "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "license": "MIT", - "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -5241,7 +5233,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -5263,7 +5254,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz", "integrity": "sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==", "license": "Apache-2.0", - "peer": true, "engines": { "node": "^18.19.0 || >=20.6.0" }, @@ -5276,7 +5266,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -5292,7 +5281,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz", "integrity": "sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.208.0", "import-in-the-middle": "^2.0.0", @@ -5680,7 +5668,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -5697,7 +5684,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", @@ -5715,7 +5701,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz", "integrity": "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -6388,7 +6373,6 @@ "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "playwright": "1.57.0" }, @@ -6404,7 +6388,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -8505,7 +8488,6 @@ "resolved": "https://registry.npmjs.org/@solana/kit/-/kit-3.0.3.tgz", "integrity": "sha512-CEEhCDmkvztd1zbgADsEQhmj9GyWOOGeW1hZD+gtwbBSF5YN1uofS/pex5MIh/VIqKRj+A2UnYWI1V+9+q/lyQ==", "license": "MIT", - "peer": true, "dependencies": { "@solana/accounts": "3.0.3", "@solana/addresses": "3.0.3", @@ -9108,7 +9090,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.11.tgz", "integrity": "sha512-f9z/nXhCgWDF4lHqgIE30jxLe4sYv15QodfdPDKYAk7nAEjNcndy4dHz3ezhdUaR23BpWa4I2EH4/DZ0//Uf8A==", "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -9119,7 +9100,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.11.tgz", "integrity": "sha512-3uyzz01D1fkTLXuxF3JfoJoHQMU2fxsfJwE+6N5hHy0dVNoZOvwKP8Z2k7k1KDeD54N20apcJnG75TBAStIrBA==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/query-core": "5.90.11" }, @@ -9332,7 +9312,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -9402,6 +9383,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -9412,6 +9394,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "license": "MIT", + "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -9757,7 +9740,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -9816,7 +9798,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.3.tgz", "integrity": "sha512-k5dJVszUiNr1DSe8Cs+knKR6IrqhqdhpUwzqhkS8ecQTSf3THNtbfIp/umqHMpX2bv+9dkx3fwDv/86LcSfvSg==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -9826,7 +9807,6 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -9952,7 +9932,6 @@ "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.48.0", @@ -9993,7 +9972,6 @@ "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.0", "@typescript-eslint/types": "8.48.0", @@ -10626,6 +10604,7 @@ "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz", "integrity": "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=12.20.0" }, @@ -10720,7 +10699,6 @@ "integrity": "sha512-SSlIG6QEVxClgl1s0LMk4xr2wg4eT3Zn/Hb81IocyqNSGfXpjtawWxKxiC5/9Z95f1INyBD6MctJbL/R1oBwIw==", "deprecated": "Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases", "license": "Apache-2.0", - "peer": true, "dependencies": { "@reown/appkit": "1.7.8", "@walletconnect/jsonrpc-http-connection": "1.0.8", @@ -11828,7 +11806,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -12333,6 +12310,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -12342,25 +12320,29 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -12371,13 +12353,15 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -12390,6 +12374,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "license": "MIT", + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -12399,6 +12384,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -12407,13 +12393,15 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -12430,6 +12418,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -12443,6 +12432,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -12455,6 +12445,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -12469,6 +12460,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -12484,13 +12476,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/abab": { "version": "2.0.6", @@ -12526,7 +12520,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -12559,6 +12552,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=10.13.0" }, @@ -12641,6 +12635,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", + "peer": true, "dependencies": { "ajv": "^8.0.0" }, @@ -12658,6 +12653,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -12673,7 +12669,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/ansi-escapes": { "version": "4.3.2", @@ -13110,7 +13107,6 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", - "peer": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -13200,7 +13196,6 @@ "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/types": "^7.26.0" } @@ -13481,7 +13476,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -13564,7 +13558,6 @@ "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -13823,7 +13816,6 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", "license": "MIT", - "peer": true, "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -13914,6 +13906,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=6.0" } @@ -15148,7 +15141,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dom-helpers": { "version": "5.2.1", @@ -15287,7 +15281,6 @@ "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.16.tgz", "integrity": "sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==", "license": "MIT", - "peer": true, "dependencies": { "@ecies/ciphers": "^0.2.4", "@noble/ciphers": "^1.3.0", @@ -15335,8 +15328,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/emoji-mart/-/emoji-mart-5.6.0.tgz", "integrity": "sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/emoji-regex": { "version": "10.6.0", @@ -15437,6 +15429,7 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "license": "MIT", + "peer": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -15595,7 +15588,8 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -15771,7 +15765,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -15957,7 +15950,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -16604,8 +16596,7 @@ "version": "6.4.9", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/eventemitter3": { "version": "5.0.1", @@ -16808,7 +16799,8 @@ "url": "https://opencollective.com/fastify" } ], - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/fastest-stable-stringify": { "version": "2.0.2", @@ -17421,7 +17413,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "peer": true }, "node_modules/glob/node_modules/minimatch": { "version": "10.1.1", @@ -18925,6 +18918,7 @@ "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", "license": "MIT", + "peer": true, "funding": { "type": "GitHub Sponsors ❤", "url": "https://github.com/sponsors/dmonad" @@ -22839,6 +22833,7 @@ "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.114.tgz", "integrity": "sha512-gcxmNFzA4hv8UYi8j43uPlQ7CGcyMJ2KQb5kZASw6SnAKAf10hK12i2fjrS3Cl/ugZa5Ui6WwIu1/6MIXiHttQ==", "license": "MIT", + "peer": true, "dependencies": { "isomorphic.js": "^0.2.4" }, @@ -22937,6 +22932,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=6.11.5" }, @@ -23039,6 +23035,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -24319,7 +24316,6 @@ "resolved": "https://registry.npmjs.org/next/-/next-16.0.10.tgz", "integrity": "sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==", "license": "MIT", - "peer": true, "dependencies": { "@next/env": "16.0.10", "@swc/helpers": "0.5.15", @@ -25708,7 +25704,6 @@ "resolved": "https://registry.npmjs.org/porto/-/porto-0.2.35.tgz", "integrity": "sha512-gu9FfjjvvYBgQXUHWTp6n3wkTxVtEcqFotM7i3GEZeoQbvLGbssAicCz6hFZ8+xggrJWwi/RLmbwNra50SMmUQ==", "license": "MIT", - "peer": true, "dependencies": { "hono": "^4.10.3", "idb-keyval": "^6.2.1", @@ -25869,7 +25864,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -25902,7 +25896,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -26063,6 +26056,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -26078,6 +26072,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -26090,7 +26085,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/prismjs": { "version": "1.30.0", @@ -26161,7 +26157,6 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -26506,6 +26501,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -26515,7 +26511,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -26566,7 +26561,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -26630,7 +26624,6 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -26823,7 +26816,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -26884,8 +26876,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -26900,8 +26891,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", @@ -27059,6 +27049,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -27219,7 +27210,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -27361,7 +27351,6 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -27460,7 +27449,6 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.2.tgz", "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -27528,6 +27516,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -27564,6 +27553,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -27575,7 +27565,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/screenfull": { "version": "5.2.0", @@ -27627,6 +27618,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -27980,7 +27972,6 @@ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", "license": "MIT", - "peer": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -28756,7 +28747,6 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -28822,7 +28812,6 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -28874,6 +28863,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" }, @@ -28887,6 +28877,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -28905,6 +28896,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -28939,6 +28931,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "license": "MIT", + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -28953,6 +28946,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -28967,13 +28961,15 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "license": "MIT", + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -29079,8 +29075,7 @@ "version": "0.163.0", "resolved": "https://registry.npmjs.org/three/-/three-0.163.0.tgz", "integrity": "sha512-HlMgCb2TF/dTLRtknBnjUTsR8FsDqBY43itYop2+Zg822I+Kd0Ua2vs8CvfBVefXkBdNDrLMoRTGCIIpfCuDew==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/throttle-debounce": { "version": "3.0.1", @@ -29496,8 +29491,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tsx": { "version": "4.21.0", @@ -29505,7 +29499,6 @@ "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" @@ -30121,7 +30114,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -30652,7 +30644,6 @@ "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -30712,7 +30703,6 @@ "resolved": "https://registry.npmjs.org/valtio/-/valtio-2.1.7.tgz", "integrity": "sha512-DwJhCDpujuQuKdJ2H84VbTjEJJteaSmqsuUltsfbfdbotVfNeTE4K/qc/Wi57I9x8/2ed4JNdjEna7O6PfavRg==", "license": "MIT", - "peer": true, "dependencies": { "proxy-compare": "^3.0.1" }, @@ -30771,7 +30761,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", @@ -30914,7 +30903,6 @@ "resolved": "https://registry.npmjs.org/wagmi/-/wagmi-2.19.5.tgz", "integrity": "sha512-RQUfKMv6U+EcSNNGiPbdkDtJwtuFxZWLmvDiQmjjBgkuPulUwDJsKhi7gjynzJdsx2yDqhHCXkKsbbfbIsHfcQ==", "license": "MIT", - "peer": true, "dependencies": { "@wagmi/connectors": "6.2.0", "@wagmi/core": "2.22.1", @@ -30970,7 +30958,6 @@ "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-2.22.1.tgz", "integrity": "sha512-cG/xwQWsBEcKgRTkQVhH29cbpbs/TdcUJVFXCyri3ZknxhMyGv0YEjTcrNpRgt2SaswL1KrvslSNYKKo+5YEAg==", "license": "MIT", - "peer": true, "dependencies": { "eventemitter3": "5.0.1", "mipd": "0.0.7", @@ -30998,7 +30985,6 @@ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", "license": "MIT", - "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -31066,6 +31052,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "license": "MIT", + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -31110,6 +31097,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -31173,6 +31161,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -31186,6 +31175,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -31408,7 +31398,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -31561,7 +31550,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" }