From 42402eb5c73c7dfa286a3e31ad8ae08f660f80ad Mon Sep 17 00:00:00 2001 From: Jelle van Snik Date: Sat, 7 Jan 2023 21:36:18 +0100 Subject: [PATCH] new search view --- package.json | 7 +- src/components/SearchBar.tsx | 66 +- src/components/buttons/DropdownButton.tsx | 72 +- src/components/layout/Backdrop.tsx | 49 +- src/components/layout/ErrorBoundary.tsx | 2 +- src/components/layout/Navigation.tsx | 16 +- src/components/layout/SectionHeading.tsx | 10 - src/components/layout/ThinContainer.tsx | 4 +- src/components/text/Title.tsx | 6 +- src/constants.ts | 3 - src/index.tsx | 9 +- src/providers/list/flixhq/index.ts | 2 +- src/providers/list/gdriveplayer/index.ts | 2 +- src/providers/list/gomostream/index.ts | 2 +- src/providers/list/superstream/index.ts | 2 +- src/providers/list/theflix/index.ts | 2 +- src/providers/list/theflix/portableToMedia.ts | 2 +- src/providers/list/theflix/search.ts | 2 +- src/providers/list/xemovie/index.ts | 2 +- src/{ => setup}/App.tsx | 6 +- src/{ => setup}/config.ts | 2 +- src/{mw_constants.ts => setup/constants.ts} | 0 src/{ => setup}/i18n.ts | 0 src/{ => setup}/index.css | 6 +- src/utils/cache.ts | 60 +- src/utils/storage.ts | 20 +- src/views/MediaView.tsx | 4 +- src/views/SearchView.tsx | 224 --- src/views/notfound/NotFoundView.tsx | 22 +- src/views/search/HomeView.tsx | 65 + src/views/search/SearchLoadingView.tsx | 12 + src/views/search/SearchResultsPartial.tsx | 32 + src/views/search/SearchResultsView.tsx | 102 ++ src/views/search/SearchView.tsx | 54 + vite.config.ts | 3 +- yarn.lock | 1234 ++++++++++++++++- 36 files changed, 1714 insertions(+), 392 deletions(-) delete mode 100644 src/constants.ts rename src/{ => setup}/App.tsx (88%) rename src/{ => setup}/config.ts (95%) rename src/{mw_constants.ts => setup/constants.ts} (100%) rename src/{ => setup}/i18n.ts (100%) rename src/{ => setup}/index.css (70%) delete mode 100644 src/views/SearchView.tsx create mode 100644 src/views/search/HomeView.tsx create mode 100644 src/views/search/SearchLoadingView.tsx create mode 100644 src/views/search/SearchResultsPartial.tsx create mode 100644 src/views/search/SearchResultsView.tsx create mode 100644 src/views/search/SearchView.tsx diff --git a/package.json b/package.json index f3cfd55c..405a6ca5 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "react-dom": "^17.0.2", "react-i18next": "^12.1.1", "react-router-dom": "^5.2.0", + "react-stickynode": "^4.1.0", "srt-webvtt": "^2.0.0", "unpacker": "^1.0.1" }, @@ -47,6 +48,7 @@ "@types/react-dom": "^17.0.11", "@types/react-router": "^5.1.18", "@types/react-router-dom": "^5.3.3", + "@types/react-stickynode": "^4.0.0", "@typescript-eslint/eslint-plugin": "^5.13.0", "@typescript-eslint/parser": "^5.13.0", "@vitejs/plugin-react-swc": "^3.0.0", @@ -59,12 +61,15 @@ "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "7.29.4", "eslint-plugin-react-hooks": "4.3.0", + "i": "^0.3.7", + "npm": "^9.2.0", "postcss": "^8.4.20", "prettier": "^2.5.1", "prettier-plugin-tailwindcss": "^0.1.7", "tailwind-scrollbar": "^2.0.1", "tailwindcss": "^3.2.4", "typescript": "^4.6.4", - "vite": "^4.0.1" + "vite": "^4.0.1", + "vite-plugin-package-version": "^1.0.2" } } diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx index 6a5c3ad4..eea26423 100644 --- a/src/components/SearchBar.tsx +++ b/src/components/SearchBar.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { MWMediaType, MWQuery } from "@/providers"; import { useTranslation } from "react-i18next"; import { DropdownButton } from "./buttons/DropdownButton"; -import { Icons } from "./Icon"; +import { Icon, Icons } from "./Icon"; import { TextInputControl } from "./text-inputs/TextInputControl"; export interface SearchBarProps { @@ -37,42 +37,48 @@ export function SearchBarInput(props: SearchBarProps) { } return ( -
+
+
+ +
+ setSearch(val)} value={props.value.searchQuery} - className="w-full flex-1 bg-transparent text-white placeholder-denim-700 focus:outline-none" + className="w-full flex-1 bg-transparent px-4 py-4 pl-12 text-white placeholder-denim-700 focus:outline-none sm:py-4 sm:pr-2" placeholder={props.placeholder} /> - setDropdownOpen(val)} - selectedItem={props.value.type} - setSelectedItem={(val) => setType(val)} - options={[ - { - id: MWMediaType.MOVIE, - name: t('searchBar.movie'), - icon: Icons.FILM, - }, - { - id: MWMediaType.SERIES, - name: t('searchBar.series'), - icon: Icons.CLAPPER_BOARD, - }, - // { - // id: MWMediaType.ANIME, - // name: "Anime", - // icon: Icons.DRAGON, - // }, - ]} - onClick={() => setDropdownOpen((old) => !old)} - > - {props.buttonText || t('searchBar.search')} - +
+ setDropdownOpen(val)} + selectedItem={props.value.type} + setSelectedItem={(val) => setType(val)} + options={[ + { + id: MWMediaType.MOVIE, + name: t("searchBar.movie"), + icon: Icons.FILM, + }, + { + id: MWMediaType.SERIES, + name: t("searchBar.series"), + icon: Icons.CLAPPER_BOARD, + }, + // { + // id: MWMediaType.ANIME, + // name: "Anime", + // icon: Icons.DRAGON, + // }, + ]} + onClick={() => setDropdownOpen((old) => !old)} + > + {props.buttonText || t("searchBar.search")} + +
); } diff --git a/src/components/buttons/DropdownButton.tsx b/src/components/buttons/DropdownButton.tsx index 5c1a12c5..f32517ba 100644 --- a/src/components/buttons/DropdownButton.tsx +++ b/src/components/buttons/DropdownButton.tsx @@ -6,7 +6,11 @@ import React, { } from "react"; import { Icon, Icons } from "@/components/Icon"; -import { Backdrop, useBackdrop } from "@/components/layout/Backdrop"; +import { + Backdrop, + BackdropContainer, + useBackdrop, +} from "@/components/layout/Backdrop"; import { ButtonControlProps, ButtonControl } from "./ButtonControl"; export interface OptionItem { @@ -56,7 +60,7 @@ export const DropdownButton = React.forwardRef< ); useEffect(() => { - let id: NodeJS.Timeout; + let id: ReturnType; if (props.open) { setDelayedSelectedId(props.selectedItem); @@ -93,37 +97,43 @@ export const DropdownButton = React.forwardRef< className="relative w-full sm:w-auto" {...highlightedProps} > - props.setOpen(false)} + {...backdropProps} > - - {selectedItem.name} - - -
- {props.options - .filter((opt) => opt.id !== delayedSelectedId) - .map((opt) => ( -
+ + + {selectedItem.name} + + +
+ {props.options + .filter((opt) => opt.id !== delayedSelectedId) + .map((opt) => ( +
+
- props.setOpen(false)} {...backdropProps} /> ); }); diff --git a/src/components/layout/Backdrop.tsx b/src/components/layout/Backdrop.tsx index 65d3a81d..3daac079 100644 --- a/src/components/layout/Backdrop.tsx +++ b/src/components/layout/Backdrop.tsx @@ -1,5 +1,6 @@ -import { useEffect, useState } from "react"; +import React, { createRef, useEffect, useState } from "react"; import { useFade } from "@/hooks/useFade"; +import { createPortal } from "react-dom"; interface BackdropProps { onClick?: (e: MouseEvent) => void; @@ -58,7 +59,7 @@ export function Backdrop(props: BackdropProps) { return (
); } + +export function BackdropContainer( + props: { + children: React.ReactNode; + } & BackdropProps +) { + const root = createRef(); + const copy = createRef(); + + useEffect(() => { + let frame = -1; + function poll() { + if (root.current && copy.current) { + const rect = root.current.getBoundingClientRect(); + copy.current.style.top = `${rect.top}px`; + copy.current.style.left = `${rect.left}px`; + copy.current.style.width = `${rect.width}px`; + copy.current.style.height = `${rect.height}px`; + } + frame = window.requestAnimationFrame(poll); + } + poll(); + return () => { + window.cancelAnimationFrame(frame); + }; + // we dont want this to run only on mount, dont care about ref updates + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [root, copy]); + + return ( +
+ {createPortal( +
+ +
+ {props.children} +
+
, + document.body + )} +
{props.children}
+
+ ); +} diff --git a/src/components/layout/ErrorBoundary.tsx b/src/components/layout/ErrorBoundary.tsx index b1803226..061ff5df 100644 --- a/src/components/layout/ErrorBoundary.tsx +++ b/src/components/layout/ErrorBoundary.tsx @@ -3,7 +3,7 @@ import { IconPatch } from "@/components/buttons/IconPatch"; import { Icons } from "@/components/Icon"; import { Link } from "@/components/text/Link"; import { Title } from "@/components/text/Title"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; interface ErrorBoundaryState { hasError: boolean; diff --git a/src/components/layout/Navigation.tsx b/src/components/layout/Navigation.tsx index 00fd2eb0..71d40f76 100644 --- a/src/components/layout/Navigation.tsx +++ b/src/components/layout/Navigation.tsx @@ -2,17 +2,25 @@ import { ReactNode } from "react"; import { Link } from "react-router-dom"; import { IconPatch } from "@/components/buttons/IconPatch"; import { Icons } from "@/components/Icon"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; import { BrandPill } from "./BrandPill"; export interface NavigationProps { children?: ReactNode; + bg?: boolean; } export function Navigation(props: NavigationProps) { return ( -
-
+
+
+
+
+
diff --git a/src/components/layout/ThinContainer.tsx b/src/components/layout/ThinContainer.tsx index c1866956..e1672f63 100644 --- a/src/components/layout/ThinContainer.tsx +++ b/src/components/layout/ThinContainer.tsx @@ -8,7 +8,9 @@ interface ThinContainerProps { export function ThinContainer(props: ThinContainerProps) { return (
{props.children}
diff --git a/src/components/text/Title.tsx b/src/components/text/Title.tsx index 436a2663..f6771c6f 100644 --- a/src/components/text/Title.tsx +++ b/src/components/text/Title.tsx @@ -3,5 +3,9 @@ export interface TitleProps { } export function Title(props: TitleProps) { - return

{props.children}

; + return ( +

+ {props.children} +

+ ); } diff --git a/src/constants.ts b/src/constants.ts deleted file mode 100644 index f9ac5da1..00000000 --- a/src/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const DISCORD_LINK = "https://discord.gg/Jhqt4Xzpfb"; -export const GITHUB_LINK = "https://github.com/JamesHawkinss/movie-web"; -export const APP_VERSION = "2.1.0"; diff --git a/src/index.tsx b/src/index.tsx index d0a08f46..d6b93ba0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,11 +1,12 @@ import React, { Suspense } from "react"; import ReactDOM from "react-dom"; import { HashRouter } from "react-router-dom"; -import "./index.css"; import { ErrorBoundary } from "@/components/layout/ErrorBoundary"; -import App from "./App"; -import "./i18n"; -import { conf } from "./config"; +import { conf } from "@/setup/config"; + +import App from "@/setup/App"; +import "@/setup/i18n"; +import "@/setup/index.css"; // initialize const key = diff --git a/src/providers/list/flixhq/index.ts b/src/providers/list/flixhq/index.ts index 8fe6564d..304f0157 100644 --- a/src/providers/list/flixhq/index.ts +++ b/src/providers/list/flixhq/index.ts @@ -7,7 +7,7 @@ import { MWProviderMediaResult, } from "@/providers/types"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; export const flixhqProvider: MWMediaProvider = { id: "flixhq", diff --git a/src/providers/list/gdriveplayer/index.ts b/src/providers/list/gdriveplayer/index.ts index d13d2414..b1ed69d3 100644 --- a/src/providers/list/gdriveplayer/index.ts +++ b/src/providers/list/gdriveplayer/index.ts @@ -9,7 +9,7 @@ import { MWProviderMediaResult, } from "@/providers/types"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; const format = { stringify: (cipher: any) => { diff --git a/src/providers/list/gomostream/index.ts b/src/providers/list/gomostream/index.ts index 092645d4..e9d65d88 100644 --- a/src/providers/list/gomostream/index.ts +++ b/src/providers/list/gomostream/index.ts @@ -9,7 +9,7 @@ import { MWProviderMediaResult, } from "@/providers/types"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; export const gomostreamScraper: MWMediaProvider = { id: "gomostream", diff --git a/src/providers/list/superstream/index.ts b/src/providers/list/superstream/index.ts index 3dc26e7b..832e141a 100644 --- a/src/providers/list/superstream/index.ts +++ b/src/providers/list/superstream/index.ts @@ -4,7 +4,7 @@ import { customAlphabet } from "nanoid"; import toWebVTT from "srt-webvtt"; import CryptoJS from "crypto-js"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; import { MWMediaProvider, MWMediaType, diff --git a/src/providers/list/theflix/index.ts b/src/providers/list/theflix/index.ts index cdfe8e66..01ac7092 100644 --- a/src/providers/list/theflix/index.ts +++ b/src/providers/list/theflix/index.ts @@ -15,7 +15,7 @@ import { } from "@/providers/list/theflix/search"; import { getDataFromPortableSearch } from "@/providers/list/theflix/portableToMedia"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; export const theFlixScraper: MWMediaProvider = { id: "theflix", diff --git a/src/providers/list/theflix/portableToMedia.ts b/src/providers/list/theflix/portableToMedia.ts index 191e828c..4f42dd47 100644 --- a/src/providers/list/theflix/portableToMedia.ts +++ b/src/providers/list/theflix/portableToMedia.ts @@ -1,4 +1,4 @@ -import { conf } from "@/config"; +import { conf } from "@/setup/config"; import { MWMediaType, MWPortableMedia } from "@/providers/types"; const getTheFlixUrl = (media: MWPortableMedia, params?: URLSearchParams) => { diff --git a/src/providers/list/theflix/search.ts b/src/providers/list/theflix/search.ts index c0dded24..aa575194 100644 --- a/src/providers/list/theflix/search.ts +++ b/src/providers/list/theflix/search.ts @@ -1,4 +1,4 @@ -import { conf } from "@/config"; +import { conf } from "@/setup/config"; import { MWMediaType, MWProviderMediaResult, MWQuery } from "@/providers"; const getTheFlixUrl = (type: "tv-shows" | "movies", params: URLSearchParams) => diff --git a/src/providers/list/xemovie/index.ts b/src/providers/list/xemovie/index.ts index 2d14e73b..82df6848 100644 --- a/src/providers/list/xemovie/index.ts +++ b/src/providers/list/xemovie/index.ts @@ -8,7 +8,7 @@ import { MWMediaCaption, } from "@/providers/types"; -import { conf } from "@/config"; +import { conf } from "@/setup/config"; export const xemovieScraper: MWMediaProvider = { id: "xemovie", diff --git a/src/App.tsx b/src/setup/App.tsx similarity index 88% rename from src/App.tsx rename to src/setup/App.tsx index b427c62e..b23cf7ee 100644 --- a/src/App.tsx +++ b/src/setup/App.tsx @@ -2,10 +2,10 @@ import { Redirect, Route, Switch } from "react-router-dom"; import { MWMediaType } from "@/providers"; import { BookmarkContextProvider } from "@/state/bookmark"; import { WatchedContextProvider } from "@/state/watched"; + import { NotFoundPage } from "@/views/notfound/NotFoundView"; -import "./index.css"; -import { MediaView } from "./views/MediaView"; -import { SearchView } from "./views/SearchView"; +import { MediaView } from "@/views/MediaView"; +import { SearchView } from "@/views/search/SearchView"; function App() { return ( diff --git a/src/config.ts b/src/setup/config.ts similarity index 95% rename from src/config.ts rename to src/setup/config.ts index 6e4fb805..951be497 100644 --- a/src/config.ts +++ b/src/setup/config.ts @@ -1,4 +1,4 @@ -import { APP_VERSION, GITHUB_LINK, DISCORD_LINK } from "@/constants"; +import { APP_VERSION, GITHUB_LINK, DISCORD_LINK } from "./constants"; interface Config { APP_VERSION: string; diff --git a/src/mw_constants.ts b/src/setup/constants.ts similarity index 100% rename from src/mw_constants.ts rename to src/setup/constants.ts diff --git a/src/i18n.ts b/src/setup/i18n.ts similarity index 100% rename from src/i18n.ts rename to src/setup/i18n.ts diff --git a/src/index.css b/src/setup/index.css similarity index 70% rename from src/index.css rename to src/setup/index.css index eadd4e89..efc192db 100644 --- a/src/index.css +++ b/src/setup/index.css @@ -4,13 +4,11 @@ html, body { - @apply bg-denim-100 text-denim-700 font-open-sans min-h-screen; + @apply bg-denim-100 text-denim-700 font-open-sans min-h-screen overflow-x-hidden; } #root { - display: flex; - justify-content: flex-start; - align-items: flex-start; + padding: 0.05px; min-height: 100vh; width: 100%; } diff --git a/src/utils/cache.ts b/src/utils/cache.ts index 383a660e..f5c3be3b 100644 --- a/src/utils/cache.ts +++ b/src/utils/cache.ts @@ -1,15 +1,15 @@ export class SimpleCache { protected readonly INTERVAL_MS = 2 * 60 * 1000; // 2 minutes - protected _interval: NodeJS.Timer | null = null; + protected _interval: ReturnType | null = null; protected _compare: ((a: Key, b: Key) => boolean) | null = null; protected _storage: { key: Key; value: Value; expiry: Date }[] = []; /* - ** initialize store, will start the interval - */ + ** initialize store, will start the interval + */ public initialize(): void { if (this._interval) throw new Error("cache is already initialized"); this._interval = setInterval(() => { @@ -22,46 +22,48 @@ export class SimpleCache { } /* - ** destroy cache instance, its not safe to use the instance after calling this - */ + ** destroy cache instance, its not safe to use the instance after calling this + */ public destroy(): void { - if (this._interval) - clearInterval(this._interval); + if (this._interval) clearInterval(this._interval); this.clear(); } - + /* - ** Set compare function, function must return true if A & B are equal - */ + ** Set compare function, function must return true if A & B are equal + */ public setCompare(compare: (a: Key, b: Key) => boolean): void { this._compare = compare; } /* - ** check if cache contains the item - */ + ** check if cache contains the item + */ public has(key: Key): boolean { return !!this.get(key); } - + /* - ** get item from cache - */ + ** get item from cache + */ public get(key: Key): Value | undefined { if (!this._compare) throw new Error("Compare function not set"); - const foundValue = this._storage.find(item => this._compare && this._compare(item.key, key)); - if (!foundValue) - return undefined; + const foundValue = this._storage.find( + (item) => this._compare && this._compare(item.key, key) + ); + if (!foundValue) return undefined; return foundValue.value; } - + /* - ** set item from cache, if it already exists, it will overwrite - */ + ** set item from cache, if it already exists, it will overwrite + */ public set(key: Key, value: Value, expirySeconds: number): void { if (!this._compare) throw new Error("Compare function not set"); - const foundValue = this._storage.find(item => this._compare && this._compare(item.key, key)); - const expiry = new Date((new Date().getTime()) + (expirySeconds * 1000)); + const foundValue = this._storage.find( + (item) => this._compare && this._compare(item.key, key) + ); + const expiry = new Date(new Date().getTime() + expirySeconds * 1000); // overwrite old value if (foundValue) { @@ -76,12 +78,12 @@ export class SimpleCache { key, value, expiry, - }) + }); } /* - ** remove item from cache - */ + ** remove item from cache + */ public remove(key: Key): void { if (!this._compare) throw new Error("Compare function not set"); this._storage.filter((val) => { @@ -89,10 +91,10 @@ export class SimpleCache { return true; }); } - + /* - ** clear entire cache storage - */ + ** clear entire cache storage + */ public clear(): void { this._storage = []; } diff --git a/src/utils/storage.ts b/src/utils/storage.ts index 51befa7a..9e56e651 100644 --- a/src/utils/storage.ts +++ b/src/utils/storage.ts @@ -157,19 +157,19 @@ export function versionedStoreBuilder(): any { version, // version number update: migrate ? (data: any) => { - // update function, and increment version - const newData = migrate(data); - newData["--version"] = version; // eslint-disable-line no-param-reassign - return newData; - } + // update function, and increment version + const newData = migrate(data); + newData["--version"] = version; // eslint-disable-line no-param-reassign + return newData; + } : undefined, init: create ? () => { - // return an initial object - const data = create(); - data["--version"] = version; - return data; - } + // return an initial object + const data = create(); + data["--version"] = version; + return data; + } : undefined, }; return this; diff --git a/src/views/MediaView.tsx b/src/views/MediaView.tsx index 1c121cd2..02ea86e0 100644 --- a/src/views/MediaView.tsx +++ b/src/views/MediaView.tsx @@ -120,7 +120,7 @@ function LoadingMediaFooter(props: { error?: boolean }) { {props.error ? (
-

{t('media.invalidUrl')}

+

{t("media.invalidUrl")}

) : ( @@ -200,7 +200,7 @@ export function MediaView() { : reactHistory.push("/") } direction="left" - linkText={t('media.arrowText')} + linkText={t("media.arrowText")} /> diff --git a/src/views/SearchView.tsx b/src/views/SearchView.tsx deleted file mode 100644 index 5d7fa97b..00000000 --- a/src/views/SearchView.tsx +++ /dev/null @@ -1,224 +0,0 @@ -import { useEffect, useMemo, useState } from "react"; -import { WatchedMediaCard } from "@/components/media/WatchedMediaCard"; -import { SearchBarInput } from "@/components/SearchBar"; -import { MWMassProviderOutput, MWQuery, SearchProviders } from "@/providers"; -import { ThinContainer } from "@/components/layout/ThinContainer"; -import { SectionHeading } from "@/components/layout/SectionHeading"; -import { Icons } from "@/components/Icon"; -import { Loading } from "@/components/layout/Loading"; -import { Tagline } from "@/components/text/Tagline"; -import { Title } from "@/components/text/Title"; -import { useDebounce } from "@/hooks/useDebounce"; -import { useLoading } from "@/hooks/useLoading"; -import { IconPatch } from "@/components/buttons/IconPatch"; -import { Navigation } from "@/components/layout/Navigation"; -import { useSearchQuery } from "@/hooks/useSearchQuery"; -import { useWatchedContext } from "@/state/watched/context"; -import { - getIfBookmarkedFromPortable, - useBookmarkContext, -} from "@/state/bookmark/context"; -import { useTranslation } from "react-i18next"; - -function SearchLoading() { - const { t } = useTranslation(); - return ; -} - -function SearchSuffix(props: { - fails: number; - total: number; - resultsSize: number; -}) { - const { t } = useTranslation(); - - const allFailed: boolean = props.fails === props.total; - const icon: Icons = allFailed ? Icons.WARNING : Icons.EYE_SLASH; - - return ( -
- - - {/* standard suffix */} - {!allFailed ? ( -
- {props.fails > 0 ? ( -

- {t('search.providersFailed', { fails: props.fails, total: props.total })} -

- ) : null} - {props.resultsSize > 0 ? ( -

{t('search.allResults')}

- ) : ( -

{t('search.noResults')}

- )} -
- ) : null} - - {/* Error result */} - {allFailed ? ( -
-

{t('search.allFailed')}

-
- ) : null} -
- ); -} - -function SearchResultsView({ - searchQuery, - clear, -}: { - searchQuery: MWQuery; - clear: () => void; -}) { - const { t } = useTranslation(); - - const [results, setResults] = useState(); - const [runSearchQuery, loading, error, success] = useLoading( - (query: MWQuery) => SearchProviders(query) - ); - - useEffect(() => { - async function runSearch(query: MWQuery) { - const searchResults = await runSearchQuery(query); - if (!searchResults) return; - setResults(searchResults); - } - - if (searchQuery.searchQuery !== "") runSearch(searchQuery); - }, [searchQuery, runSearchQuery]); - - return ( -
- {/* results */} - {success && results?.results.length ? ( - clear()} - > - {results.results.map((v) => ( - - ))} - - ) : null} - - {/* search suffix */} - {success && results ? ( - - ) : null} - - {/* error */} - {error ? : null} - - {/* Loading icon */} - {loading ? : null} -
- ); -} - -function ExtraItems() { - const { t } = useTranslation(); - - const { getFilteredBookmarks } = useBookmarkContext(); - const { getFilteredWatched } = useWatchedContext(); - - const bookmarks = getFilteredBookmarks(); - - const watchedItems = getFilteredWatched().filter( - (v) => !getIfBookmarkedFromPortable(bookmarks, v) - ); - - if (watchedItems.length === 0 && bookmarks.length === 0) return null; - - return ( -
- {bookmarks.length > 0 ? ( - - {bookmarks.map((v) => ( - - ))} - - ) : null} - {watchedItems.length > 0 ? ( - - {watchedItems.map((v) => ( - - ))} - - ) : null} -
- ); -} - -export function SearchView() { - const { t } = useTranslation(); - - const [searching, setSearching] = useState(false); - const [loading, setLoading] = useState(false); - const [search, setSearch, setSearchUnFocus] = useSearchQuery(); - - const debouncedSearch = useDebounce(search, 2000); - useEffect(() => { - setSearching(search.searchQuery !== ""); - setLoading(search.searchQuery !== ""); - }, [search]); - useEffect(() => { - setLoading(false); - }, [debouncedSearch]); - - const resultView = useMemo(() => { - if (loading) return ; - if (searching) - return ( - setSearch({ searchQuery: "" }, true)} - /> - ); - return ; - }, [loading, searching, debouncedSearch, setSearch]); - - return ( - <> - - - {/* input section */} -
-
- {t('search.tagline')} - {t('search.title')} -
- -
- - {/* results view */} - {resultView} -
- - ); -} diff --git a/src/views/notfound/NotFoundView.tsx b/src/views/notfound/NotFoundView.tsx index c797e281..6ba492ac 100644 --- a/src/views/notfound/NotFoundView.tsx +++ b/src/views/notfound/NotFoundView.tsx @@ -26,11 +26,9 @@ export function NotFoundMedia() { icon={Icons.EYE_SLASH} className="mb-6 text-xl text-bink-600" /> - {t('notFound.media.title')} -

- {t('notFound.media.description')} -

- + {t("notFound.media.title")} +

{t("notFound.media.description")}

+
); } @@ -44,11 +42,11 @@ export function NotFoundProvider() { icon={Icons.EYE_SLASH} className="mb-6 text-xl text-bink-600" /> - {t('notFound.provider.title')} + {t("notFound.provider.title")}

- {t('notFound.provider.description')} + {t("notFound.provider.description")}

- +
); } @@ -62,11 +60,9 @@ export function NotFoundPage() { icon={Icons.EYE_SLASH} className="mb-6 text-xl text-bink-600" /> - {t('notFound.page.title')} -

- {t('notFound.page.description')} -

- + {t("notFound.page.title")} +

{t("notFound.page.description")}

+ ); } diff --git a/src/views/search/HomeView.tsx b/src/views/search/HomeView.tsx new file mode 100644 index 00000000..d646646f --- /dev/null +++ b/src/views/search/HomeView.tsx @@ -0,0 +1,65 @@ +import { Icons } from "@/components/Icon"; +import { SectionHeading } from "@/components/layout/SectionHeading"; +import { WatchedMediaCard } from "@/components/media/WatchedMediaCard"; +import { + getIfBookmarkedFromPortable, + useBookmarkContext, +} from "@/state/bookmark"; +import { useWatchedContext } from "@/state/watched"; +import { useTranslation } from "react-i18next"; + +function Bookmarks() { + const { t } = useTranslation(); + const { getFilteredBookmarks } = useBookmarkContext(); + const bookmarks = getFilteredBookmarks(); + + if (bookmarks.length === 0) return null; + + return ( + + {bookmarks.map((v) => ( + + ))} + + ); +} + +function Watched() { + const { t } = useTranslation(); + const { getFilteredBookmarks } = useBookmarkContext(); + const { getFilteredWatched } = useWatchedContext(); + + const bookmarks = getFilteredBookmarks(); + const watchedItems = getFilteredWatched().filter( + (v) => !getIfBookmarkedFromPortable(bookmarks, v) + ); + + if (watchedItems.length === 0) return null; + + return ( + + {watchedItems.map((v) => ( + + ))} + + ); +} + +export function HomeView() { + return ( +
+ + +
+ ); +} diff --git a/src/views/search/SearchLoadingView.tsx b/src/views/search/SearchLoadingView.tsx new file mode 100644 index 00000000..e8ce46d2 --- /dev/null +++ b/src/views/search/SearchLoadingView.tsx @@ -0,0 +1,12 @@ +import { Loading } from "@/components/layout/Loading"; +import { useTranslation } from "react-i18next"; + +export function SearchLoadingView() { + const { t } = useTranslation(); + return ( + + ); +} diff --git a/src/views/search/SearchResultsPartial.tsx b/src/views/search/SearchResultsPartial.tsx new file mode 100644 index 00000000..96934fa8 --- /dev/null +++ b/src/views/search/SearchResultsPartial.tsx @@ -0,0 +1,32 @@ +import { useDebounce } from "@/hooks/useDebounce"; +import { MWQuery } from "@/providers"; +import { useEffect, useMemo, useState } from "react"; +import { HomeView } from "./HomeView"; +import { SearchLoadingView } from "./SearchLoadingView"; +import { SearchResultsView } from "./SearchResultsView"; + +interface SearchResultsPartialProps { + search: MWQuery; +} + +export function SearchResultsPartial({ search }: SearchResultsPartialProps) { + const [searching, setSearching] = useState(false); + const [loading, setLoading] = useState(false); + + const debouncedSearch = useDebounce(search, 2000); + useEffect(() => { + setSearching(search.searchQuery !== ""); + setLoading(search.searchQuery !== ""); + }, [search]); + useEffect(() => { + setLoading(false); + }, [debouncedSearch]); + + const resultView = useMemo(() => { + if (loading) return ; + if (searching) return ; + return ; + }, [loading, searching, debouncedSearch]); + + return resultView; +} diff --git a/src/views/search/SearchResultsView.tsx b/src/views/search/SearchResultsView.tsx new file mode 100644 index 00000000..a948553c --- /dev/null +++ b/src/views/search/SearchResultsView.tsx @@ -0,0 +1,102 @@ +import { IconPatch } from "@/components/buttons/IconPatch"; +import { Icons } from "@/components/Icon"; +import { SectionHeading } from "@/components/layout/SectionHeading"; +import { WatchedMediaCard } from "@/components/media/WatchedMediaCard"; +import { useLoading } from "@/hooks/useLoading"; +import { MWMassProviderOutput, MWQuery, SearchProviders } from "@/providers"; +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { SearchLoadingView } from "./SearchLoadingView"; + +function SearchSuffix(props: { + fails: number; + total: number; + resultsSize: number; +}) { + const { t } = useTranslation(); + + const allFailed: boolean = props.fails === props.total; + const icon: Icons = allFailed ? Icons.WARNING : Icons.EYE_SLASH; + + return ( +
+ + + {/* standard suffix */} + {!allFailed ? ( +
+ {props.fails > 0 ? ( +

+ {t("search.providersFailed", { + fails: props.fails, + total: props.total, + })} +

+ ) : null} + {props.resultsSize > 0 ? ( +

{t("search.allResults")}

+ ) : ( +

{t("search.noResults")}

+ )} +
+ ) : null} + + {/* Error result */} + {allFailed ? ( +
+

{t("search.allFailed")}

+
+ ) : null} +
+ ); +} + +export function SearchResultsView({ searchQuery }: { searchQuery: MWQuery }) { + const { t } = useTranslation(); + + const [results, setResults] = useState(); + const [runSearchQuery, loading, error] = useLoading((query: MWQuery) => + SearchProviders(query) + ); + + useEffect(() => { + async function runSearch(query: MWQuery) { + const searchResults = await runSearchQuery(query); + if (!searchResults) return; + setResults(searchResults); + } + + if (searchQuery.searchQuery !== "") runSearch(searchQuery); + }, [searchQuery, runSearchQuery]); + + if (loading) return ; + if (error) return ; + if (!results) return null; + + return ( +
+ {results?.results.length > 0 ? ( + + {results.results.map((v) => ( + + ))} + + ) : null} + + +
+ ); +} diff --git a/src/views/search/SearchView.tsx b/src/views/search/SearchView.tsx new file mode 100644 index 00000000..d4f5e1d9 --- /dev/null +++ b/src/views/search/SearchView.tsx @@ -0,0 +1,54 @@ +import { useCallback, useState } from "react"; +import { Navigation } from "@/components/layout/Navigation"; +import { ThinContainer } from "@/components/layout/ThinContainer"; +import { SearchBarInput } from "@/components/SearchBar"; +import Sticky from "react-stickynode"; +import { Title } from "@/components/text/Title"; +import { useSearchQuery } from "@/hooks/useSearchQuery"; +import { useTranslation } from "react-i18next"; + +import { SearchResultsPartial } from "./SearchResultsPartial"; + +export function SearchView() { + const { t } = useTranslation(); + const [search, setSearch, setSearchUnFocus] = useSearchQuery(); + const [showBg, setShowBg] = useState(false); + + const stickStateChanged = useCallback( + ({ status }: Sticky.Status) => setShowBg(status === Sticky.STATUS_FIXED), + [setShowBg] + ); + + return ( + <> +
+ + +
+
+
+
+
+
+ {t("search.title")} +
+ + + +
+
+ +
+ + + + + ); +} diff --git a/vite.config.ts b/vite.config.ts index d02fa01f..c9788164 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,9 +1,10 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react-swc"; +import loadVersion from "vite-plugin-package-version"; import path from "path"; export default defineConfig({ - plugins: [react()], + plugins: [react(), loadVersion()], resolve: { alias: { "@": path.resolve(__dirname, "./src"), diff --git a/yarn.lock b/yarn.lock index 1e35f4e6..b454d8fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,6 +17,9 @@ dependencies: "regenerator-runtime" "^0.13.11" +"@colors/colors@1.5.0": + "version" "1.5.0" + "@esbuild/linux-x64@0.16.5": "integrity" "sha512-vsOwzKN+4NenUTyuoWLmg5dAuO8JKuLD9MXSeENA385XucuOZbblmOMwwgPlHsgVRtSjz38riqPJU2ALI/CWYQ==" "resolved" "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.5.tgz" @@ -37,6 +40,9 @@ "minimatch" "^3.1.2" "strip-json-comments" "^3.1.1" +"@gar/promisify@^1.1.3": + "version" "1.1.3" + "@headlessui/react@^1.5.0": "integrity" "sha512-UZSxOfA0CYKO7QDT5OGlFvesvlR1SKkawwSjwQJwt7XQItpzRKdE3ZUQxHcg4LEz3C0Wler2s9psdb872ynwrQ==" "resolved" "https://registry.npmjs.org/@headlessui/react/-/react-1.7.5.tgz" @@ -63,6 +69,9 @@ "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" "version" "1.2.1" +"@isaacs/string-locale-compare@^1.1.0": + "version" "1.1.0" + "@nodelib/fs.scandir@2.1.5": "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -84,6 +93,141 @@ "@nodelib/fs.scandir" "2.1.5" "fastq" "^1.6.0" +"@npmcli/arborist@^6.1.5": + "version" "6.1.5" + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.0" + "@npmcli/installed-package-contents" "^2.0.0" + "@npmcli/map-workspaces" "^3.0.0" + "@npmcli/metavuln-calculator" "^5.0.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^3.0.0" + "@npmcli/query" "^3.0.0" + "@npmcli/run-script" "^6.0.0" + "bin-links" "^4.0.1" + "cacache" "^17.0.3" + "common-ancestor-path" "^1.0.1" + "hosted-git-info" "^6.1.1" + "json-parse-even-better-errors" "^3.0.0" + "json-stringify-nice" "^1.1.4" + "minimatch" "^5.1.1" + "nopt" "^7.0.0" + "npm-install-checks" "^6.0.0" + "npm-package-arg" "^10.1.0" + "npm-pick-manifest" "^8.0.1" + "npm-registry-fetch" "^14.0.3" + "npmlog" "^7.0.1" + "pacote" "^15.0.7" + "parse-conflict-json" "^3.0.0" + "proc-log" "^3.0.0" + "promise-all-reject-late" "^1.0.0" + "promise-call-limit" "^1.0.1" + "read-package-json-fast" "^3.0.1" + "semver" "^7.3.7" + "ssri" "^10.0.1" + "treeverse" "^3.0.0" + "walk-up-path" "^1.0.0" + +"@npmcli/config@^6.1.0": + "version" "6.1.0" + dependencies: + "@npmcli/map-workspaces" "^3.0.0" + "ini" "^3.0.0" + "nopt" "^7.0.0" + "proc-log" "^3.0.0" + "read-package-json-fast" "^3.0.0" + "semver" "^7.3.5" + "walk-up-path" "^1.0.0" + +"@npmcli/disparity-colors@^3.0.0": + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.3.0" + +"@npmcli/fs@^2.1.0": + "version" "2.1.2" + dependencies: + "@gar/promisify" "^1.1.3" + "semver" "^7.3.5" + +"@npmcli/fs@^3.1.0": + "version" "3.1.0" + dependencies: + "semver" "^7.3.5" + +"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1": + "version" "4.0.3" + dependencies: + "@npmcli/promise-spawn" "^6.0.0" + "lru-cache" "^7.4.4" + "mkdirp" "^1.0.4" + "npm-pick-manifest" "^8.0.0" + "proc-log" "^3.0.0" + "promise-inflight" "^1.0.1" + "promise-retry" "^2.0.1" + "semver" "^7.3.5" + "which" "^3.0.0" + +"@npmcli/installed-package-contents@^2.0.0", "@npmcli/installed-package-contents@^2.0.1": + "version" "2.0.1" + dependencies: + "npm-bundled" "^3.0.0" + "npm-normalize-package-bin" "^3.0.0" + +"@npmcli/map-workspaces@^3.0.0": + "version" "3.0.0" + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + "glob" "^8.0.1" + "minimatch" "^5.0.1" + "read-package-json-fast" "^3.0.0" + +"@npmcli/metavuln-calculator@^5.0.0": + "version" "5.0.0" + dependencies: + "cacache" "^17.0.0" + "json-parse-even-better-errors" "^3.0.0" + "pacote" "^15.0.0" + "semver" "^7.3.5" + +"@npmcli/move-file@^2.0.0": + "version" "2.0.1" + dependencies: + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + "version" "1.0.1" + +"@npmcli/node-gyp@^3.0.0": + "version" "3.0.0" + +"@npmcli/package-json@^3.0.0": + "version" "3.0.0" + dependencies: + "json-parse-even-better-errors" "^3.0.0" + +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + "version" "6.0.1" + dependencies: + "which" "^3.0.0" + +"@npmcli/query@^3.0.0": + "version" "3.0.0" + dependencies: + "postcss-selector-parser" "^6.0.10" + +"@npmcli/run-script@^6.0.0": + "version" "6.0.0" + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + "node-gyp" "^9.0.0" + "read-package-json-fast" "^3.0.0" + "which" "^3.0.0" + "@swc/core-linux-x64-gnu@1.3.22": "integrity" "sha512-FLkbiqsdXsVIFZi6iedx4rSBGX8x0vo/5aDlklSxJAAYOcQpO0QADKP5Yr65iMT1d6ABCt2d+/StpGLF7GWOcA==" "resolved" "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.22.tgz" @@ -110,6 +254,9 @@ "@swc/core-win32-ia32-msvc" "1.3.22" "@swc/core-win32-x64-msvc" "1.3.22" +"@tootallnate/once@2": + "version" "2.0.0" + "@types/crypto-js@^4.1.1": "integrity" "sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==" "resolved" "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.1.tgz" @@ -164,6 +311,13 @@ "@types/history" "^4.7.11" "@types/react" "*" +"@types/react-stickynode@^4.0.0": + "integrity" "sha512-PKkmOzF6WCNuyIKrvhidGeUPLfe8htPwfEljKnQBF4bA5v74ADvXtwkjavOH8i6aCSw9J14AyDDl1Ul0VNQJUg==" + "resolved" "https://registry.npmjs.org/@types/react-stickynode/-/react-stickynode-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@types/react" "*" + "@types/react@*", "@types/react@^17", "@types/react@^17.0.39": "integrity" "sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==" "resolved" "https://registry.npmjs.org/@types/react/-/react-17.0.52.tgz" @@ -273,6 +427,17 @@ dependencies: "@swc/core" "^1.3.21" +"abbrev@^1.0.0": + "version" "1.1.1" + +"abbrev@^2.0.0": + "version" "2.0.0" + +"abort-controller@^3.0.0": + "version" "3.0.0" + dependencies: + "event-target-shim" "^5.0.0" + "acorn-jsx@^5.3.2": "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" @@ -302,6 +467,24 @@ "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" "version" "7.4.1" +"agent-base@^6.0.2", "agent-base@6": + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.2.1": + "version" "4.2.1" + dependencies: + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + "ajv@^6.10.0", "ajv@^6.12.4": "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -317,7 +500,7 @@ "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" "version" "5.0.1" -"ansi-styles@^4.1.0": +"ansi-styles@^4.1.0", "ansi-styles@^4.3.0": "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" "version" "4.3.0" @@ -332,6 +515,24 @@ "normalize-path" "^3.0.0" "picomatch" "^2.0.4" +"aproba@^1.0.3 || ^2.0.0", "aproba@^2.0.0": + "version" "2.0.0" + +"archy@~1.0.0": + "version" "1.0.0" + +"are-we-there-yet@^3.0.0": + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"are-we-there-yet@^4.0.0": + "version" "4.0.0" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^4.1.0" + "arg@^5.0.2": "integrity" "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" @@ -418,11 +619,25 @@ "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" "version" "1.0.2" +"base64-js@^1.3.1": + "version" "1.5.1" + +"bin-links@^4.0.1": + "version" "4.0.1" + dependencies: + "cmd-shim" "^6.0.0" + "npm-normalize-package-bin" "^3.0.0" + "read-cmd-shim" "^4.0.0" + "write-file-atomic" "^5.0.0" + "binary-extensions@^2.0.0": "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" "version" "2.2.0" +"binary-extensions@^2.2.0": + "version" "2.2.0" + "brace-expansion@^1.1.7": "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -431,6 +646,11 @@ "balanced-match" "^1.0.0" "concat-map" "0.0.1" +"brace-expansion@^2.0.1": + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + "braces@^3.0.2", "braces@~3.0.2": "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" @@ -448,6 +668,56 @@ "node-releases" "^2.0.6" "update-browserslist-db" "^1.0.9" +"buffer@^6.0.3": + "version" "6.0.3" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" + +"builtins@^5.0.0": + "version" "5.0.1" + dependencies: + "semver" "^7.0.0" + +"cacache@^16.1.0": + "version" "16.1.3" + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "infer-owner" "^1.0.4" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "mkdirp" "^1.0.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + "unique-filename" "^2.0.0" + +"cacache@^17.0.0", "cacache@^17.0.3": + "version" "17.0.3" + dependencies: + "@npmcli/fs" "^3.1.0" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "lru-cache" "^7.7.1" + "minipass" "^4.0.0" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "ssri" "^10.0.0" + "tar" "^6.1.11" + "unique-filename" "^3.0.0" + "call-bind@^1.0.0", "call-bind@^1.0.2": "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" @@ -471,7 +741,7 @@ "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz" "version" "1.0.30001439" -"chalk@^4.0.0": +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.2": "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" "version" "4.1.2" @@ -494,11 +764,49 @@ optionalDependencies: "fsevents" "~2.3.2" +"chownr@^2.0.0": + "version" "2.0.0" + +"ci-info@^3.7.0": + "version" "3.7.0" + +"cidr-regex@^3.1.1": + "version" "3.1.1" + dependencies: + "ip-regex" "^4.1.0" + +"classnames@^2.0.0": + "integrity" "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" + "version" "2.3.2" + +"clean-stack@^2.0.0": + "version" "2.2.0" + +"cli-columns@^4.0.0": + "version" "4.0.0" + dependencies: + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + +"cli-table3@^0.6.3": + "version" "0.6.3" + dependencies: + "string-width" "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + "client-only@^0.0.1": "integrity" "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" "resolved" "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz" "version" "0.0.1" +"clone@^1.0.2": + "version" "1.0.4" + +"cmd-shim@^6.0.0": + "version" "6.0.0" + "color-convert@^2.0.1": "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" @@ -511,6 +819,18 @@ "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" "version" "1.1.4" +"color-support@^1.1.3": + "version" "1.1.3" + +"columnify@^1.6.0": + "version" "1.6.0" + dependencies: + "strip-ansi" "^6.0.1" + "wcwidth" "^1.0.0" + +"common-ancestor-path@^1.0.1": + "version" "1.0.1" + "concat-map@0.0.1": "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -521,11 +841,19 @@ "resolved" "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" "version" "1.0.11" +"console-control-strings@^1.1.0": + "version" "1.1.0" + "core-js-pure@^3.25.1": "integrity" "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==" "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz" "version" "3.26.1" +"core-js@^3.6.5": + "integrity" "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==" + "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz" + "version" "3.27.1" + "cross-fetch@3.1.5": "integrity" "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==" "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" @@ -576,6 +904,11 @@ dependencies: "ms" "^2.1.1" +"debug@^4.1.0", "debug@^4.3.3", "debug@4": + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4": "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" @@ -588,6 +921,11 @@ "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" "version" "0.1.4" +"defaults@^1.0.3": + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + "define-properties@^1.1.3", "define-properties@^1.1.4": "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" @@ -601,6 +939,12 @@ "resolved" "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz" "version" "1.0.1" +"delegates@^1.0.0": + "version" "1.0.0" + +"depd@^1.1.2": + "version" "1.1.2" + "detective@^5.2.1": "integrity" "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==" "resolved" "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz" @@ -615,6 +959,9 @@ "resolved" "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" "version" "1.2.2" +"diff@^5.1.0": + "version" "5.1.0" + "dir-glob@^3.0.1": "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -646,11 +993,25 @@ "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" "version" "1.4.284" +"emoji-regex@^8.0.0": + "version" "8.0.0" + "emoji-regex@^9.2.2": "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" "version" "9.2.2" +"encoding@^0.1.13": + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"env-paths@^2.2.0": + "version" "2.2.1" + +"err-code@^2.0.2": + "version" "2.0.3" + "es-abstract@^1.19.0", "es-abstract@^1.20.4": "integrity" "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==" "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz" @@ -965,6 +1326,17 @@ "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" "version" "2.0.3" +"event-target-shim@^5.0.0": + "version" "5.0.1" + +"eventemitter3@^3.0.0": + "integrity" "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz" + "version" "3.1.2" + +"events@^3.3.0": + "version" "3.3.0" + "fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -991,6 +1363,9 @@ "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" "version" "2.0.6" +"fastest-levenshtein@^1.0.16": + "version" "1.0.16" + "fastq@^1.6.0": "integrity" "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==" "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz" @@ -1038,6 +1413,11 @@ "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" "version" "4.2.0" +"fs-minipass@^2.0.0", "fs-minipass@^2.1.0": + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + "fs.realpath@^1.0.0": "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -1068,6 +1448,30 @@ "resolved" "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz" "version" "6.6.2" +"gauge@^4.0.3": + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"gauge@^5.0.0": + "version" "5.0.0" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + "get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3": "integrity" "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==" "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" @@ -1118,6 +1522,25 @@ "once" "^1.3.0" "path-is-absolute" "^1.0.0" +"glob@^7.1.4": + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^8.0.1": + "version" "8.0.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + "globals@^13.15.0": "integrity" "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==" "resolved" "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" @@ -1144,6 +1567,9 @@ dependencies: "get-intrinsic" "^1.1.3" +"graceful-fs@^4.2.10", "graceful-fs@^4.2.6": + "version" "4.2.10" + "grapheme-splitter@^1.0.4": "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" @@ -1178,6 +1604,9 @@ dependencies: "has-symbols" "^1.0.2" +"has-unicode@^2.0.1": + "version" "2.0.1" + "has@^1.0.3": "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" @@ -1209,6 +1638,11 @@ dependencies: "react-is" "^16.7.0" +"hosted-git-info@^6.0.0", "hosted-git-info@^6.1.1": + "version" "6.1.1" + dependencies: + "lru-cache" "^7.5.1" + "html-parse-stringify@^3.0.1": "integrity" "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==" "resolved" "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz" @@ -1216,6 +1650,32 @@ dependencies: "void-elements" "3.1.0" +"http-cache-semantics@^4.1.0": + "version" "4.1.0" + +"http-proxy-agent@^5.0.0": + "version" "5.0.0" + dependencies: + "@tootallnate/once" "2" + "agent-base" "6" + "debug" "4" + +"https-proxy-agent@^5.0.0": + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"humanize-ms@^1.2.1": + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"i@^0.3.7": + "integrity" "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==" + "resolved" "https://registry.npmjs.org/i/-/i-0.3.7.tgz" + "version" "0.3.7" + "i18next-browser-languagedetector@^7.0.1": "integrity" "sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==" "resolved" "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.0.1.tgz" @@ -1237,6 +1697,19 @@ dependencies: "@babel/runtime" "^7.20.6" +"iconv-lite@^0.6.2": + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"ieee754@^1.2.1": + "version" "1.2.1" + +"ignore-walk@^6.0.0": + "version" "6.0.0" + dependencies: + "minimatch" "^5.0.1" + "ignore@^5.2.0": "integrity" "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==" "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz" @@ -1255,6 +1728,12 @@ "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" "version" "0.1.4" +"indent-string@^4.0.0": + "version" "4.0.0" + +"infer-owner@^1.0.4": + "version" "1.0.4" + "inflight@^1.0.4": "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -1263,11 +1742,25 @@ "once" "^1.3.0" "wrappy" "1" -"inherits@2": +"inherits@^2.0.3", "inherits@2": "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" "version" "2.0.4" +"ini@^3.0.0", "ini@^3.0.1": + "version" "3.0.1" + +"init-package-json@^4.0.1": + "version" "4.0.1" + dependencies: + "npm-package-arg" "^10.0.0" + "promzard" "^0.3.0" + "read" "^1.0.7" + "read-package-json" "^6.0.0" + "semver" "^7.3.5" + "validate-npm-package-license" "^3.0.4" + "validate-npm-package-name" "^5.0.0" + "internal-slot@^1.0.3": "integrity" "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==" "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz" @@ -1277,6 +1770,12 @@ "has" "^1.0.3" "side-channel" "^1.0.4" +"ip-regex@^4.1.0": + "version" "4.3.0" + +"ip@^2.0.0": + "version" "2.0.0" + "is-bigint@^1.0.1": "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" @@ -1304,6 +1803,11 @@ "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" "version" "1.2.7" +"is-cidr@^4.0.2": + "version" "4.0.2" + dependencies: + "cidr-regex" "^3.1.1" + "is-core-module@^2.8.1", "is-core-module@^2.9.0": "integrity" "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" @@ -1323,6 +1827,9 @@ "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" "version" "2.1.1" +"is-fullwidth-code-point@^3.0.0": + "version" "3.0.0" + "is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -1330,6 +1837,9 @@ dependencies: "is-extglob" "^2.1.1" +"is-lambda@^1.0.1": + "version" "1.0.1" + "is-negative-zero@^2.0.2": "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" @@ -1415,6 +1925,9 @@ dependencies: "argparse" "^2.0.1" +"json-parse-even-better-errors@^3.0.0": + "version" "3.0.0" + "json-schema-traverse@^0.4.1": "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -1425,6 +1938,9 @@ "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" "version" "1.0.1" +"json-stringify-nice@^1.1.4": + "version" "1.1.4" + "json5@^1.0.1": "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" @@ -1437,6 +1953,9 @@ "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" "version" "2.2.1" +"jsonparse@^1.3.1": + "version" "1.3.1" + "jsx-ast-utils@^2.4.1 || ^3.0.0", "jsx-ast-utils@^3.3.2": "integrity" "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==" "resolved" "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" @@ -1445,6 +1964,12 @@ "array-includes" "^3.1.5" "object.assign" "^4.1.3" +"just-diff-apply@^5.2.0": + "version" "5.4.1" + +"just-diff@^5.0.1": + "version" "5.1.1" + "language-subtag-registry@^0.3.20": "integrity" "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" "resolved" "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" @@ -1465,6 +1990,95 @@ "prelude-ls" "^1.2.1" "type-check" "~0.4.0" +"libnpmaccess@^7.0.1": + "version" "7.0.1" + dependencies: + "npm-package-arg" "^10.1.0" + "npm-registry-fetch" "^14.0.3" + +"libnpmdiff@^5.0.6": + "version" "5.0.6" + dependencies: + "@npmcli/arborist" "^6.1.5" + "@npmcli/disparity-colors" "^3.0.0" + "@npmcli/installed-package-contents" "^2.0.0" + "binary-extensions" "^2.2.0" + "diff" "^5.1.0" + "minimatch" "^5.1.1" + "npm-package-arg" "^10.1.0" + "pacote" "^15.0.7" + "tar" "^6.1.13" + +"libnpmexec@^5.0.6": + "version" "5.0.6" + dependencies: + "@npmcli/arborist" "^6.1.5" + "@npmcli/run-script" "^6.0.0" + "chalk" "^4.1.0" + "ci-info" "^3.7.0" + "npm-package-arg" "^10.1.0" + "npmlog" "^7.0.1" + "pacote" "^15.0.7" + "proc-log" "^3.0.0" + "read" "^1.0.7" + "read-package-json-fast" "^3.0.1" + "semver" "^7.3.7" + "walk-up-path" "^1.0.0" + +"libnpmfund@^4.0.6": + "version" "4.0.6" + dependencies: + "@npmcli/arborist" "^6.1.5" + +"libnpmhook@^9.0.1": + "version" "9.0.1" + dependencies: + "aproba" "^2.0.0" + "npm-registry-fetch" "^14.0.3" + +"libnpmorg@^5.0.1": + "version" "5.0.1" + dependencies: + "aproba" "^2.0.0" + "npm-registry-fetch" "^14.0.3" + +"libnpmpack@^5.0.6": + "version" "5.0.6" + dependencies: + "@npmcli/arborist" "^6.1.5" + "@npmcli/run-script" "^6.0.0" + "npm-package-arg" "^10.1.0" + "pacote" "^15.0.7" + +"libnpmpublish@^7.0.6": + "version" "7.0.6" + dependencies: + "normalize-package-data" "^5.0.0" + "npm-package-arg" "^10.1.0" + "npm-registry-fetch" "^14.0.3" + "semver" "^7.3.7" + "ssri" "^10.0.1" + +"libnpmsearch@^6.0.1": + "version" "6.0.1" + dependencies: + "npm-registry-fetch" "^14.0.3" + +"libnpmteam@^5.0.1": + "version" "5.0.1" + dependencies: + "aproba" "^2.0.0" + "npm-registry-fetch" "^14.0.3" + +"libnpmversion@^4.0.1": + "version" "4.0.1" + dependencies: + "@npmcli/git" "^4.0.1" + "@npmcli/run-script" "^6.0.0" + "json-parse-even-better-errors" "^3.0.0" + "proc-log" "^3.0.0" + "semver" "^7.3.7" + "lilconfig@^2.0.5", "lilconfig@^2.0.6": "integrity" "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" @@ -1482,6 +2096,11 @@ "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" "version" "4.6.2" +"lodash@^4.17.15": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + "loose-envify@^1.1.0", "loose-envify@^1.2.0", "loose-envify@^1.3.1", "loose-envify@^1.4.0": "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -1496,6 +2115,49 @@ dependencies: "yallist" "^4.0.0" +"lru-cache@^7.4.4", "lru-cache@^7.5.1", "lru-cache@^7.7.1": + "version" "7.13.2" + +"make-fetch-happen@^10.0.3": + "version" "10.2.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^16.1.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^2.0.3" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^9.0.0" + +"make-fetch-happen@^11.0.0", "make-fetch-happen@^11.0.2": + "version" "11.0.2" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^17.0.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^4.0.0" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^3.0.0" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^10.0.0" + "merge2@^1.3.0", "merge2@^1.4.1": "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" @@ -1516,11 +2178,87 @@ dependencies: "brace-expansion" "^1.1.7" +"minimatch@^5.0.1", "minimatch@^5.1.1": + "version" "5.1.1" + dependencies: + "brace-expansion" "^2.0.1" + "minimist@^1.2.0", "minimist@^1.2.6": "integrity" "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" "version" "1.2.7" +"minipass-collect@^1.0.2": + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-fetch@^2.0.3": + "version" "2.1.2" + dependencies: + "minipass" "^3.1.6" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" + optionalDependencies: + "encoding" "^0.1.13" + +"minipass-fetch@^3.0.0": + "version" "3.0.0" + dependencies: + "minipass" "^3.1.6" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" + optionalDependencies: + "encoding" "^0.1.13" + +"minipass-flush@^1.0.5": + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-json-stream@^1.0.1": + "version" "1.0.1" + dependencies: + "jsonparse" "^1.3.1" + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.4": + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass-sized@^1.0.3": + "version" "1.0.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0": + "version" "3.3.6" + dependencies: + "yallist" "^4.0.0" + +"minipass@^3.1.1", "minipass@^3.1.6": + "version" "3.3.6" + dependencies: + "yallist" "^4.0.0" + +"minipass@^4.0.0": + "version" "4.0.0" + dependencies: + "yallist" "^4.0.0" + +"minizlib@^2.1.1", "minizlib@^2.1.2": + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp@^1.0.3", "mkdirp@^1.0.4": + "version" "1.0.4" + +"ms@^2.0.0", "ms@^2.1.2": + "version" "2.1.3" + "ms@^2.1.1", "ms@2.1.2": "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -1531,6 +2269,9 @@ "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" "version" "2.0.0" +"mute-stream@~0.0.4": + "version" "0.0.8" + "nanoid@^3.3.4": "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" @@ -1551,6 +2292,9 @@ "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" "version" "1.4.0" +"negotiator@^0.6.3": + "version" "0.6.3" + "node-fetch@2.6.7": "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" @@ -1558,11 +2302,43 @@ dependencies: "whatwg-url" "^5.0.0" +"node-gyp@^9.0.0", "node-gyp@^9.3.0": + "version" "9.3.0" + dependencies: + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^10.0.3" + "nopt" "^6.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + "node-releases@^2.0.6": "integrity" "sha512-EJ3rzxL9pTWPjk5arA0s0dgXpnyiAbJDE6wHT62g7VsgrgQgmmZ+Ru++M1BFofncWja+Pnn3rEr3fieRySAdKQ==" "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.7.tgz" "version" "2.0.7" +"nopt@^6.0.0": + "version" "6.0.0" + dependencies: + "abbrev" "^1.0.0" + +"nopt@^7.0.0": + "version" "7.0.0" + dependencies: + "abbrev" "^2.0.0" + +"normalize-package-data@^5.0.0": + "version" "5.0.0" + dependencies: + "hosted-git-info" "^6.0.0" + "is-core-module" "^2.8.1" + "semver" "^7.3.5" + "validate-npm-package-license" "^3.0.4" + "normalize-path@^3.0.0", "normalize-path@~3.0.0": "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -1573,6 +2349,155 @@ "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" "version" "0.1.2" +"npm-audit-report@^4.0.0": + "version" "4.0.0" + dependencies: + "chalk" "^4.0.0" + +"npm-bundled@^3.0.0": + "version" "3.0.0" + dependencies: + "npm-normalize-package-bin" "^3.0.0" + +"npm-install-checks@^6.0.0": + "version" "6.0.0" + dependencies: + "semver" "^7.1.1" + +"npm-normalize-package-bin@^3.0.0": + "version" "3.0.0" + +"npm-package-arg@^10.0.0", "npm-package-arg@^10.1.0": + "version" "10.1.0" + dependencies: + "hosted-git-info" "^6.0.0" + "proc-log" "^3.0.0" + "semver" "^7.3.5" + "validate-npm-package-name" "^5.0.0" + +"npm-packlist@^7.0.0": + "version" "7.0.4" + dependencies: + "ignore-walk" "^6.0.0" + +"npm-pick-manifest@^8.0.0", "npm-pick-manifest@^8.0.1": + "version" "8.0.1" + dependencies: + "npm-install-checks" "^6.0.0" + "npm-normalize-package-bin" "^3.0.0" + "npm-package-arg" "^10.0.0" + "semver" "^7.3.5" + +"npm-profile@^7.0.1": + "version" "7.0.1" + dependencies: + "npm-registry-fetch" "^14.0.0" + "proc-log" "^3.0.0" + +"npm-registry-fetch@^14.0.0", "npm-registry-fetch@^14.0.3": + "version" "14.0.3" + dependencies: + "make-fetch-happen" "^11.0.0" + "minipass" "^4.0.0" + "minipass-fetch" "^3.0.0" + "minipass-json-stream" "^1.0.1" + "minizlib" "^2.1.2" + "npm-package-arg" "^10.0.0" + "proc-log" "^3.0.0" + +"npm-user-validate@^1.0.1": + "version" "1.0.1" + +"npm@^9.2.0": + "integrity" "sha512-oypVdaWGHDuV79RXLvp+B9gh6gDyAmoHKrQ0/JBYTWWx5D8/+AAxFdZC84fSIiyDdyW4qfrSyYGKhekxDOaMXQ==" + "resolved" "https://registry.npmjs.org/npm/-/npm-9.2.0.tgz" + "version" "9.2.0" + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^6.1.5" + "@npmcli/config" "^6.1.0" + "@npmcli/map-workspaces" "^3.0.0" + "@npmcli/package-json" "^3.0.0" + "@npmcli/run-script" "^6.0.0" + "abbrev" "^2.0.0" + "archy" "~1.0.0" + "cacache" "^17.0.3" + "chalk" "^4.1.2" + "ci-info" "^3.7.0" + "cli-columns" "^4.0.0" + "cli-table3" "^0.6.3" + "columnify" "^1.6.0" + "fastest-levenshtein" "^1.0.16" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "graceful-fs" "^4.2.10" + "hosted-git-info" "^6.1.1" + "ini" "^3.0.1" + "init-package-json" "^4.0.1" + "is-cidr" "^4.0.2" + "json-parse-even-better-errors" "^3.0.0" + "libnpmaccess" "^7.0.1" + "libnpmdiff" "^5.0.6" + "libnpmexec" "^5.0.6" + "libnpmfund" "^4.0.6" + "libnpmhook" "^9.0.1" + "libnpmorg" "^5.0.1" + "libnpmpack" "^5.0.6" + "libnpmpublish" "^7.0.6" + "libnpmsearch" "^6.0.1" + "libnpmteam" "^5.0.1" + "libnpmversion" "^4.0.1" + "make-fetch-happen" "^11.0.2" + "minimatch" "^5.1.1" + "minipass" "^4.0.0" + "minipass-pipeline" "^1.2.4" + "mkdirp" "^1.0.4" + "ms" "^2.1.2" + "node-gyp" "^9.3.0" + "nopt" "^7.0.0" + "npm-audit-report" "^4.0.0" + "npm-install-checks" "^6.0.0" + "npm-package-arg" "^10.1.0" + "npm-pick-manifest" "^8.0.1" + "npm-profile" "^7.0.1" + "npm-registry-fetch" "^14.0.3" + "npm-user-validate" "^1.0.1" + "npmlog" "^7.0.1" + "p-map" "^4.0.0" + "pacote" "^15.0.7" + "parse-conflict-json" "^3.0.0" + "proc-log" "^3.0.0" + "qrcode-terminal" "^0.12.0" + "read" "~1.0.7" + "read-package-json" "^6.0.0" + "read-package-json-fast" "^3.0.1" + "rimraf" "^3.0.2" + "semver" "^7.3.8" + "ssri" "^10.0.1" + "tar" "^6.1.13" + "text-table" "~0.2.0" + "tiny-relative-date" "^1.3.0" + "treeverse" "^3.0.0" + "validate-npm-package-name" "^5.0.0" + "which" "^3.0.0" + "write-file-atomic" "^5.0.0" + +"npmlog@^6.0.0": + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"npmlog@^7.0.1": + "version" "7.0.1" + dependencies: + "are-we-there-yet" "^4.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^5.0.0" + "set-blocking" "^2.0.0" + "object-assign@^4.1.1": "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -1671,6 +2596,32 @@ dependencies: "p-limit" "^3.0.2" +"p-map@^4.0.0": + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"pacote@^15.0.0", "pacote@^15.0.7": + "version" "15.0.7" + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + "cacache" "^17.0.0" + "fs-minipass" "^2.1.0" + "minipass" "^4.0.0" + "npm-package-arg" "^10.0.0" + "npm-packlist" "^7.0.0" + "npm-pick-manifest" "^8.0.0" + "npm-registry-fetch" "^14.0.0" + "proc-log" "^3.0.0" + "promise-retry" "^2.0.1" + "read-package-json" "^6.0.0" + "read-package-json-fast" "^3.0.0" + "ssri" "^10.0.0" + "tar" "^6.1.11" + "parent-module@^1.0.0": "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" @@ -1678,6 +2629,13 @@ dependencies: "callsites" "^3.0.0" +"parse-conflict-json@^3.0.0": + "version" "3.0.0" + dependencies: + "json-parse-even-better-errors" "^3.0.0" + "just-diff" "^5.0.1" + "just-diff-apply" "^5.2.0" + "path-exists@^4.0.0": "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -1710,6 +2668,11 @@ "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" "version" "4.0.0" +"performance-now@^2.1.0": + "integrity" "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + "version" "2.1.0" + "picocolors@^1.0.0": "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" @@ -1793,7 +2756,33 @@ "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" "version" "2.8.1" -"prop-types@^15.6.2", "prop-types@^15.8.1": +"proc-log@^3.0.0": + "version" "3.0.0" + +"process@^0.11.10": + "version" "0.11.10" + +"promise-all-reject-late@^1.0.0": + "version" "1.0.1" + +"promise-call-limit@^1.0.1": + "version" "1.0.1" + +"promise-inflight@^1.0.1": + "version" "1.0.1" + +"promise-retry@^2.0.1": + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"promzard@^0.3.0": + "version" "0.3.0" + dependencies: + "read" "1" + +"prop-types@^15.6.0", "prop-types@^15.6.2", "prop-types@^15.8.1": "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" "version" "15.8.1" @@ -1807,6 +2796,9 @@ "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" "version" "2.1.1" +"qrcode-terminal@^0.12.0": + "version" "0.12.0" + "queue-microtask@^1.2.2": "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" @@ -1817,7 +2809,14 @@ "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" "version" "5.1.1" -"react-dom@^16 || ^17 || ^18", "react-dom@^17.0.2": +"raf@^3.0.0": + "integrity" "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==" + "resolved" "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz" + "version" "3.4.1" + dependencies: + "performance-now" "^2.1.0" + +"react-dom@^0.14.2 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16 || ^17 || ^18", "react-dom@^17.0.2": "integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==" "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" "version" "17.0.2" @@ -1867,7 +2866,18 @@ "tiny-invariant" "^1.0.2" "tiny-warning" "^1.0.0" -"react@^16 || ^17 || ^18", "react@^17.0.2", "react@>= 16.8.0", "react@>=15", "react@17.0.2": +"react-stickynode@^4.1.0": + "integrity" "sha512-zylWgfad75jLfh/gYIayDcDWIDwO4weZrsZqDpjZ/axhF06zRjdCWFBgUr33Pvv2+htKWqPSFksWTyB6aMQ1ZQ==" + "resolved" "https://registry.npmjs.org/react-stickynode/-/react-stickynode-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "classnames" "^2.0.0" + "core-js" "^3.6.5" + "prop-types" "^15.6.0" + "shallowequal" "^1.0.0" + "subscribe-ui-event" "^2.0.6" + +"react@^0.14.2 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16 || ^17 || ^18", "react@^17.0.2", "react@>= 16.8.0", "react@>=15", "react@17.0.2": "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" "version" "17.0.2" @@ -1882,6 +2892,43 @@ dependencies: "pify" "^2.3.0" +"read-cmd-shim@^4.0.0": + "version" "4.0.0" + +"read-package-json-fast@^3.0.0", "read-package-json-fast@^3.0.1": + "version" "3.0.1" + dependencies: + "json-parse-even-better-errors" "^3.0.0" + "npm-normalize-package-bin" "^3.0.0" + +"read-package-json@^6.0.0": + "version" "6.0.0" + dependencies: + "glob" "^8.0.1" + "json-parse-even-better-errors" "^3.0.0" + "normalize-package-data" "^5.0.0" + "npm-normalize-package-bin" "^3.0.0" + +"read@^1.0.7", "read@~1.0.7", "read@1": + "version" "1.0.7" + dependencies: + "mute-stream" "~0.0.4" + +"readable-stream@^3.6.0": + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^4.1.0": + "version" "4.2.0" + dependencies: + "abort-controller" "^3.0.0" + "buffer" "^6.0.3" + "events" "^3.3.0" + "process" "^0.11.10" + "readdirp@~3.6.0": "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -1936,6 +2983,9 @@ "path-parse" "^1.0.7" "supports-preserve-symlinks-flag" "^1.0.0" +"retry@^0.12.0": + "version" "0.12.0" + "reusify@^1.0.4": "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" @@ -1962,6 +3012,9 @@ dependencies: "queue-microtask" "^1.2.2" +"safe-buffer@~5.2.0": + "version" "5.2.1" + "safe-regex-test@^1.0.0": "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" @@ -1971,6 +3024,9 @@ "get-intrinsic" "^1.1.3" "is-regex" "^1.1.4" +"safer-buffer@>= 2.1.2 < 3.0.0": + "version" "2.1.2" + "scheduler@^0.20.2": "integrity" "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==" "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" @@ -1984,13 +3040,21 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" "version" "6.3.0" -"semver@^7.3.7": +"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.5", "semver@^7.3.7", "semver@^7.3.8": "integrity" "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==" "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" "version" "7.3.8" dependencies: "lru-cache" "^6.0.0" +"set-blocking@^2.0.0": + "version" "2.0.0" + +"shallowequal@^1.0.0": + "integrity" "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "resolved" "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + "version" "1.1.0" + "shebang-command@^2.0.0": "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -2012,21 +3076,80 @@ "get-intrinsic" "^1.0.2" "object-inspect" "^1.9.0" +"signal-exit@^3.0.7": + "version" "3.0.7" + "slash@^3.0.0": "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" "version" "3.0.0" +"smart-buffer@^4.2.0": + "version" "4.2.0" + +"socks-proxy-agent@^7.0.0": + "version" "7.0.0" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "version" "2.7.0" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + "source-map-js@^1.0.2": "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" "version" "1.0.2" +"spdx-correct@^3.0.0": + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "version" "3.0.11" + "srt-webvtt@^2.0.0": "integrity" "sha512-G2Z7/Jf2NRKrmLYNSIhSYZZYE6OFlKXFp9Au2/zJBKgrioUzmrAys1x7GT01dwl6d2sEnqr5uahEIOd0JW/Rbw==" "resolved" "https://registry.npmjs.org/srt-webvtt/-/srt-webvtt-2.0.0.tgz" "version" "2.0.0" +"ssri@^10.0.0", "ssri@^10.0.1": + "version" "10.0.1" + dependencies: + "minipass" "^4.0.0" + +"ssri@^9.0.0": + "version" "9.0.1" + dependencies: + "minipass" "^3.1.1" + +"string_decoder@^1.1.1": + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.2.0", "string-width@^4.2.3": + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + "string.prototype.matchall@^4.0.6": "integrity" "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==" "resolved" "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz" @@ -2076,6 +3199,15 @@ "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" "version" "3.1.1" +"subscribe-ui-event@^2.0.6": + "integrity" "sha512-Acrtf9XXl6lpyHAWYeRD1xTPUQHDERfL4GHeNuYAtZMc4Z8Us2iDBP0Fn3xiRvkQ1FO+hx+qRLmPEwiZxp7FDQ==" + "resolved" "https://registry.npmjs.org/subscribe-ui-event/-/subscribe-ui-event-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "eventemitter3" "^3.0.0" + "lodash" "^4.17.15" + "raf" "^3.0.0" + "supports-color@^7.1.0": "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" @@ -2122,16 +3254,32 @@ "quick-lru" "^5.1.1" "resolve" "^1.22.1" +"tar@^6.1.11", "tar@^6.1.13", "tar@^6.1.2": + "version" "6.1.13" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^4.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + "text-table@^0.2.0": "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" "version" "0.2.0" +"text-table@~0.2.0": + "version" "0.2.0" + "tiny-invariant@^1.0.2": "integrity" "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" "resolved" "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz" "version" "1.3.1" +"tiny-relative-date@^1.3.0": + "version" "1.3.0" + "tiny-warning@^1.0.0": "integrity" "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" "resolved" "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" @@ -2149,6 +3297,9 @@ "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" "version" "0.0.3" +"treeverse@^3.0.0": + "version" "3.0.0" + "tsconfig-paths@^3.14.1": "integrity" "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==" "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" @@ -2198,6 +3349,26 @@ "has-symbols" "^1.0.3" "which-boxed-primitive" "^1.0.2" +"unique-filename@^2.0.0": + "version" "2.0.1" + dependencies: + "unique-slug" "^3.0.0" + +"unique-filename@^3.0.0": + "version" "3.0.0" + dependencies: + "unique-slug" "^4.0.0" + +"unique-slug@^3.0.0": + "version" "3.0.0" + dependencies: + "imurmurhash" "^0.1.4" + +"unique-slug@^4.0.0": + "version" "4.0.0" + dependencies: + "imurmurhash" "^0.1.4" + "unpacker@^1.0.1": "integrity" "sha512-0HTljwp8+JBdITpoHcK1LWi7X9U2BspUmWv78UWZh7NshYhbh1nec8baY/iSbe2OQTZ2bhAtVdnr6/BTD0DKVg==" "resolved" "https://registry.npmjs.org/unpacker/-/unpacker-1.0.1.tgz" @@ -2218,17 +3389,33 @@ dependencies: "punycode" "^2.1.0" -"util-deprecate@^1.0.2": +"util-deprecate@^1.0.1", "util-deprecate@^1.0.2": "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" "version" "1.0.2" +"validate-npm-package-license@^3.0.4": + "version" "3.0.4" + dependencies: + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" + +"validate-npm-package-name@^5.0.0": + "version" "5.0.0" + dependencies: + "builtins" "^5.0.0" + "value-equal@^1.0.1": "integrity" "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" "resolved" "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" "version" "1.0.1" -"vite@^4.0.0", "vite@^4.0.1": +"vite-plugin-package-version@^1.0.2": + "integrity" "sha512-xCJMR0KD4rqSUwINyHJlLizio2VzYzaMrRkqC9xWaVGXgw1lIrzdD+wBUf1XDM8EhL1JoQ7aykLOfKrlZd1SoQ==" + "resolved" "https://registry.npmjs.org/vite-plugin-package-version/-/vite-plugin-package-version-1.0.2.tgz" + "version" "1.0.2" + +"vite@^4.0.0", "vite@^4.0.1", "vite@>=2.0.0-beta.69": "integrity" "sha512-kZQPzbDau35iWOhy3CpkrRC7It+HIHtulAzBhMqzGHKRf/4+vmh8rPDDdv98SWQrFWo6//3ozwsRmwQIPZsK9g==" "resolved" "https://registry.npmjs.org/vite/-/vite-4.0.1.tgz" "version" "4.0.1" @@ -2245,6 +3432,14 @@ "resolved" "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" "version" "3.1.0" +"walk-up-path@^1.0.0": + "version" "1.0.0" + +"wcwidth@^1.0.0": + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + "webidl-conversions@^3.0.0": "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" @@ -2276,6 +3471,21 @@ dependencies: "isexe" "^2.0.0" +"which@^2.0.2": + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@^3.0.0": + "version" "3.0.0" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.5": + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + "word-wrap@^1.2.3": "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" @@ -2286,6 +3496,12 @@ "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" "version" "1.0.2" +"write-file-atomic@^5.0.0": + "version" "5.0.0" + dependencies: + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.7" + "xtend@^4.0.2": "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"