From 9da67334816fade5c1381c7bc6005979ef992843 Mon Sep 17 00:00:00 2001 From: Guus van Meerveld Date: Fri, 22 Mar 2024 13:33:52 +0100 Subject: [PATCH] added import sorting, added eslint rules --- .eslintrc | 32 ++ .eslintrc.json | 3 - .prettierrc.json | 24 +- .vscode/settings.json | 4 +- bruno/bruno.json | 8 +- flake.lock | 108 +++--- package.json | 13 +- postcss.config.js | 8 +- src/app/layout.tsx | 5 +- src/app/providers/ContextMenuProvider.tsx | 7 +- src/app/providers/index.tsx | 1 + src/app/results/Channel.tsx | 10 +- src/app/results/Filter.tsx | 14 +- src/app/results/Loading.tsx | 6 +- src/app/results/Playlist.tsx | 11 +- src/app/results/Search.tsx | 32 +- src/app/results/Video.tsx | 14 +- src/app/results/page.tsx | 1 + src/app/trending/RegionSwitcher.tsx | 8 +- src/app/trending/Trending.tsx | 22 +- src/app/trending/page.tsx | 4 +- src/app/watch/Watch.tsx | 6 +- src/app/watch/page.tsx | 1 + src/client/adapters/index.ts | 4 +- src/client/adapters/invidious/index.ts | 9 +- src/client/adapters/invidious/transformer.ts | 20 +- .../invidious/typings/search/index.ts | 1 + .../adapters/invidious/typings/stream.ts | 3 +- .../adapters/invidious/typings/video.ts | 1 + src/client/adapters/piped/index.ts | 10 +- src/client/adapters/piped/transformer.ts | 24 +- src/client/adapters/piped/typings/item.ts | 1 + src/client/adapters/piped/typings/stream.ts | 1 + src/client/index.ts | 8 +- src/components/Container.tsx | 3 +- src/components/ContextMenu.tsx | 1 + src/components/LoadingPage.tsx | 3 +- src/components/Nav.tsx | 12 +- src/components/Search.tsx | 13 +- src/components/Video.tsx | 25 +- src/hooks/useClient.ts | 4 +- src/hooks/useContextMenuStore.ts | 3 +- src/hooks/useSearch.ts | 3 +- tailwind.config.ts | 4 +- tsconfig.json | 48 +-- yarn.lock | 353 ++++++++++++++---- 46 files changed, 604 insertions(+), 292 deletions(-) create mode 100644 .eslintrc delete mode 100644 .eslintrc.json diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..89282ea --- /dev/null +++ b/.eslintrc @@ -0,0 +1,32 @@ +{ + "extends": [ + "plugin:@next/next/recommended", + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended", + "plugin:css-modules/recommended", + "plugin:@tanstack/eslint-plugin-query/recommended" + ], + "plugins": ["@typescript-eslint", "css-modules", "@tanstack/query"], + "rules": { + "@typescript-eslint/no-non-null-assertion": 0, + "@typescript-eslint/no-unused-vars": ["error"], + "@typescript-eslint/explicit-function-return-type": ["error"], + "padding-line-between-statements": [ + "error", + { "blankLine": "always", "prev": "*", "next": "block" }, + { "blankLine": "always", "prev": "block", "next": "*" }, + { "blankLine": "always", "prev": "*", "next": "block-like" }, + { "blankLine": "always", "prev": "block-like", "next": "*" } + ] + }, + + "ignorePatterns": [ + "/node_modules", + "/cache", + "/dist", + "/out", + "/public", + "*.js" + ] +} \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index bffb357..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/.prettierrc.json b/.prettierrc.json index 84fb09c..c95839c 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -4,6 +4,26 @@ "semi": true, "printWidth": 80, "arrowParens": "always", - "importOrderSeparation": true, - "importOrder": ["^next./", "^@nextui-org/."] + "plugins": ["@ianvs/prettier-plugin-sort-imports"], + "importOrder": [ + ".*s?css$", + "", + "", + "", + "^(next/.*)|(react.*)", + "", + "^@(:?mui|nextui-org)/.*", + "", + "^@/hooks/.*", + "", + "^@/(client)|(utils)/.*", + "", + "^(@/|\\./)components/*", + "", + "^\\.?\\./.*", + "", + "", + "", + "^(@/|\\./)typings/.*" + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 6ea2e9f..05c24cd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "prettier.configPath": ".prettierrc.json" -} \ No newline at end of file + "prettier.configPath": ".prettierrc.json" +} diff --git a/bruno/bruno.json b/bruno/bruno.json index 3160fcf..fa1792c 100644 --- a/bruno/bruno.json +++ b/bruno/bruno.json @@ -1,5 +1,5 @@ { - "version": "1", - "name": "MaterialTube", - "type": "collection" -} \ No newline at end of file + "version": "1", + "name": "MaterialTube", + "type": "collection" +} diff --git a/flake.lock b/flake.lock index d66672e..b78f4ae 100644 --- a/flake.lock +++ b/flake.lock @@ -1,56 +1,56 @@ { - "nodes": { - "flake-compat": { - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "revCount": 57, - "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1710252211, - "narHash": "sha256-hQChQpB4LDBaSrNlD6DPLhU9T+R6oyxMCg2V+S7Y1jg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "7eeacecff44e05a9fd61b9e03836b66ecde8a525", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "root": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs", - "systems": "systems" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 + "nodes": { + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1710252211, + "narHash": "sha256-hQChQpB4LDBaSrNlD6DPLhU9T+R6oyxMCg2V+S7Y1jg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7eeacecff44e05a9fd61b9e03836b66ecde8a525", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs", + "systems": "systems" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 } diff --git a/package.json b/package.json index c49fc7d..413b3dc 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build", + "prettify": "prettier . --write", "test-build": "tsc", "start": "next start", "lint": "next lint" @@ -27,17 +28,25 @@ "zustand": "^4.5.2" }, "devDependencies": { + "@ianvs/prettier-plugin-sort-imports": "^4.2.1", + "@tanstack/eslint-plugin-query": "^5.28.6", "@tanstack/react-query-devtools": "^5.27.8", - "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/luxon": "^3.4.2", "@types/next-pwa": "^5.6.9", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@typescript-eslint/eslint-plugin": "^7.3.1", + "@typescript-eslint/parser": "^7.3.1", "autoprefixer": "^10.0.1", "eslint": "^8", - "eslint-config-next": "14.1.3", + "eslint-config-next": "^14.1.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-css-modules": "^2.12.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-prettier": "^5.1.3", "postcss": "^8", + "prettier": "^3.2.5", "tailwindcss": "^3.3.0", "typescript": "^5" } diff --git a/postcss.config.js b/postcss.config.js index 12a703d..054c147 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, + plugins: { + tailwindcss: {}, + autoprefixer: {} + } }; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 633e0e5..a363d4d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,8 +1,11 @@ import type { Metadata } from "next"; + import "./globals.css"; + +import { Elements } from "./elements"; import { Providers } from "./providers"; + import { Component } from "@/typings/component"; -import { Elements } from "./elements"; export const metadata: Metadata = { title: "MaterialTube client", diff --git a/src/app/providers/ContextMenuProvider.tsx b/src/app/providers/ContextMenuProvider.tsx index f3c1020..4111d95 100644 --- a/src/app/providers/ContextMenuProvider.tsx +++ b/src/app/providers/ContextMenuProvider.tsx @@ -1,7 +1,10 @@ +import { useCallback, useEffect } from "react"; + +import { Listbox, ListboxItem } from "@nextui-org/listbox"; + import useContextMenuStore from "@/hooks/useContextMenuStore"; + import { Component } from "@/typings/component"; -import { Listbox, ListboxItem } from "@nextui-org/listbox"; -import { useCallback, useEffect } from "react"; const Menu: Component = () => { const shouldShow = useContextMenuStore((state) => state.show); diff --git a/src/app/providers/index.tsx b/src/app/providers/index.tsx index 32b3791..26a656e 100644 --- a/src/app/providers/index.tsx +++ b/src/app/providers/index.tsx @@ -3,6 +3,7 @@ import { NextUIProvider } from "@nextui-org/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; + import { ContextMenuProvider } from "./ContextMenuProvider"; export function Providers({ children }: { children: React.ReactNode }) { diff --git a/src/app/results/Channel.tsx b/src/app/results/Channel.tsx index fa41e90..27de4d7 100644 --- a/src/app/results/Channel.tsx +++ b/src/app/results/Channel.tsx @@ -1,14 +1,16 @@ "use client"; -import { Component } from "@/typings/component"; +import NextImage from "next/image"; +import Link from "next/link"; -import { ChannelItem } from "@/client/typings/item"; import { Card, CardBody } from "@nextui-org/card"; import { Image } from "@nextui-org/image"; -import Link from "next/link"; -import NextImage from "next/image"; + +import { ChannelItem } from "@/client/typings/item"; import formatBigNumber from "@/utils/formatBigNumber"; +import { Component } from "@/typings/component"; + export const Channel: Component<{ data: ChannelItem }> = ({ data }) => { const url = `/channel/${data.id}`; diff --git a/src/app/results/Filter.tsx b/src/app/results/Filter.tsx index 1367fa7..64d2112 100644 --- a/src/app/results/Filter.tsx +++ b/src/app/results/Filter.tsx @@ -1,17 +1,17 @@ -import { SearchType } from "@/client/typings/search/options"; -import { Component } from "@/typings/component"; - +import { useMemo } from "react"; import { FiFilter as FilterIcon } from "react-icons/fi"; import { Button } from "@nextui-org/button"; - import { Dropdown, - DropdownTrigger, + DropdownItem, DropdownMenu, - DropdownItem + DropdownTrigger } from "@nextui-org/dropdown"; -import { useMemo } from "react"; + +import { SearchType } from "@/client/typings/search/options"; + +import { Component } from "@/typings/component"; export const Filter: Component<{ filter: SearchType; diff --git a/src/app/results/Loading.tsx b/src/app/results/Loading.tsx index ac50179..260003a 100644 --- a/src/app/results/Loading.tsx +++ b/src/app/results/Loading.tsx @@ -1,7 +1,9 @@ -import { Component } from "@/typings/component"; -import { CircularProgress } from "@nextui-org/progress"; import { useVisibility } from "reactjs-visibility"; +import { CircularProgress } from "@nextui-org/progress"; + +import { Component } from "@/typings/component"; + export const Loading: Component<{ isFetching: boolean; onVisible: (visiblity: boolean) => void; diff --git a/src/app/results/Playlist.tsx b/src/app/results/Playlist.tsx index c574654..b06d4d1 100644 --- a/src/app/results/Playlist.tsx +++ b/src/app/results/Playlist.tsx @@ -1,14 +1,17 @@ "use client"; -import { PlaylistItem } from "@/client/typings/item"; -import { Component } from "@/typings/component"; +import NextImage from "next/image"; +import NextLink from "next/link"; + import { Card, CardBody } from "@nextui-org/card"; import { Image } from "@nextui-org/image"; -import NextLink from "next/link"; -import NextImage from "next/image"; import { Link } from "@nextui-org/link"; + +import { PlaylistItem } from "@/client/typings/item"; import { videoSize } from "@/utils/videoSize"; +import { Component } from "@/typings/component"; + export const Playlist: Component<{ data: PlaylistItem }> = ({ data }) => { const url = `/playlist/${data.id}`; const channelUrl = `/channel/${data.author.id}`; diff --git a/src/app/results/Search.tsx b/src/app/results/Search.tsx index 422b421..eeaaedf 100644 --- a/src/app/results/Search.tsx +++ b/src/app/results/Search.tsx @@ -1,22 +1,28 @@ "use client"; -import { Search as SearchInput } from "@/components/Search"; -import { useClient } from "@/hooks/useClient"; -import { Component } from "@/typings/component"; -import { Spacer } from "@nextui-org/spacer"; import { useInfiniteQuery } from "@tanstack/react-query"; -import { Channel } from "./Channel"; +import { useSearchParams } from "next/navigation"; +import { Fragment, useCallback, useMemo } from "react"; + +import { Button } from "@nextui-org/button"; +import { Spacer } from "@nextui-org/spacer"; + +import { useClient } from "@/hooks/useClient"; +import { useSearch } from "@/hooks/useSearch"; + +import { SearchType, SearchTypeModel } from "@/client/typings/search/options"; + import { Container } from "@/components/Container"; import { LoadingPage } from "@/components/LoadingPage"; -import { Button } from "@nextui-org/button"; -import { Video } from "./Video"; -import { Playlist } from "./Playlist"; -import { Fragment, useCallback, useMemo } from "react"; -import { Loading } from "./Loading"; +import { Search as SearchInput } from "@/components/Search"; + +import { Channel } from "./Channel"; import { Filter } from "./Filter"; -import { useSearchParams } from "next/navigation"; -import { SearchType, SearchTypeModel } from "@/client/typings/search/options"; -import { useSearch } from "@/hooks/useSearch"; +import { Loading } from "./Loading"; +import { Playlist } from "./Playlist"; +import { Video } from "./Video"; + +import { Component } from "@/typings/component"; export const Search: Component = () => { const client = useClient(); diff --git a/src/app/results/Video.tsx b/src/app/results/Video.tsx index c0feb51..641bd4c 100644 --- a/src/app/results/Video.tsx +++ b/src/app/results/Video.tsx @@ -1,18 +1,20 @@ "use client"; -import { Component } from "@/typings/component"; -import { VideoItem } from "@/client/typings/item"; +import NextImage from "next/image"; +import NextLink from "next/link"; + import { Card, CardBody } from "@nextui-org/card"; import { Image } from "@nextui-org/image"; +import { Link } from "@nextui-org/link"; -import NextImage from "next/image"; +import { VideoItem } from "@/client/typings/item"; import formatBigNumber from "@/utils/formatBigNumber"; -import formatUploadedTime from "@/utils/formatUploadedTime"; -import { Link } from "@nextui-org/link"; -import NextLink from "next/link"; import formatDuration from "@/utils/formatDuration"; +import formatUploadedTime from "@/utils/formatUploadedTime"; import { videoSize } from "@/utils/videoSize"; +import { Component } from "@/typings/component"; + export const Video: Component<{ data: VideoItem }> = ({ data }) => { const url = `/watch?v=${data.id}`; const channelUrl = `/channel/${data.author.id}`; diff --git a/src/app/results/page.tsx b/src/app/results/page.tsx index ce8fa53..0e59af8 100644 --- a/src/app/results/page.tsx +++ b/src/app/results/page.tsx @@ -1,4 +1,5 @@ import { Suspense } from "react"; + import { Search } from "./Search"; export default function Page() { diff --git a/src/app/trending/RegionSwitcher.tsx b/src/app/trending/RegionSwitcher.tsx index 44dffe3..a6c90ed 100644 --- a/src/app/trending/RegionSwitcher.tsx +++ b/src/app/trending/RegionSwitcher.tsx @@ -1,10 +1,12 @@ "use client"; -import { Component } from "@/typings/component"; -import { Region } from "@/utils/getRegionCodes"; +import { useRouter } from "next/navigation"; import { Autocomplete, AutocompleteItem } from "@nextui-org/autocomplete"; -import { useRouter } from "next/navigation"; + +import { Region } from "@/utils/getRegionCodes"; + +import { Component } from "@/typings/component"; export const RegionSwitcher: Component<{ regions: Region[]; diff --git a/src/app/trending/Trending.tsx b/src/app/trending/Trending.tsx index c8e901f..ddc6060 100644 --- a/src/app/trending/Trending.tsx +++ b/src/app/trending/Trending.tsx @@ -1,21 +1,25 @@ "use client"; -import { Component } from "@/typings/component"; -import { useClient } from "@/hooks/useClient"; +import { defaultRegion } from "@/constants"; + import { useQuery } from "@tanstack/react-query"; +import { useSearchParams } from "next/navigation"; +import { useMemo } from "react"; import { Button } from "@nextui-org/button"; - import { Spacer } from "@nextui-org/spacer"; -import { LoadingPage } from "@/components/LoadingPage"; -import { useSearchParams } from "next/navigation"; -import { useMemo } from "react"; +import { useClient } from "@/hooks/useClient"; + import getRegionCodes from "@/utils/getRegionCodes"; -import { RegionSwitcher } from "./RegionSwitcher"; -import { defaultRegion } from "@/constants"; -import { Video } from "@/components/Video"; + import { Container } from "@/components/Container"; +import { LoadingPage } from "@/components/LoadingPage"; +import { Video } from "@/components/Video"; + +import { RegionSwitcher } from "./RegionSwitcher"; + +import { Component } from "@/typings/component"; export const Trending: Component = ({}) => { const client = useClient(); diff --git a/src/app/trending/page.tsx b/src/app/trending/page.tsx index 89ac207..b40716e 100644 --- a/src/app/trending/page.tsx +++ b/src/app/trending/page.tsx @@ -1,7 +1,9 @@ import { Suspense } from "react"; -import { Trending } from "./Trending"; + import { LoadingPage } from "@/components/LoadingPage"; +import { Trending } from "./Trending"; + export default function Page() { return ( <> diff --git a/src/app/watch/Watch.tsx b/src/app/watch/Watch.tsx index 314f882..ec5f427 100644 --- a/src/app/watch/Watch.tsx +++ b/src/app/watch/Watch.tsx @@ -1,10 +1,12 @@ "use client"; -import { useClient } from "@/hooks/useClient"; -import { Component } from "@/typings/component"; import { useQuery } from "@tanstack/react-query"; import { useSearchParams } from "next/navigation"; +import { useClient } from "@/hooks/useClient"; + +import { Component } from "@/typings/component"; + export const Watch: Component = () => { const client = useClient(); diff --git a/src/app/watch/page.tsx b/src/app/watch/page.tsx index 4f7cbf9..a119c0c 100644 --- a/src/app/watch/page.tsx +++ b/src/app/watch/page.tsx @@ -1,4 +1,5 @@ import { Suspense } from "react"; + import { Watch } from "./Watch"; export default function Page() { diff --git a/src/client/adapters/index.ts b/src/client/adapters/index.ts index 2c59aad..4ecae42 100644 --- a/src/client/adapters/index.ts +++ b/src/client/adapters/index.ts @@ -1,8 +1,8 @@ -import { Suggestions } from "@/client/typings/search/suggestions"; -import { Video } from "@/client/typings/video"; import { SearchResults } from "@/client/typings/search"; import { SearchOptions } from "@/client/typings/search/options"; import { Stream } from "@/client/typings/search/stream"; +import { Suggestions } from "@/client/typings/search/suggestions"; +import { Video } from "@/client/typings/video"; export interface ConnectedAdapter { getTrending(region: string): Promise; diff --git a/src/client/adapters/invidious/index.ts b/src/client/adapters/invidious/index.ts index b748096..e6f6362 100644 --- a/src/client/adapters/invidious/index.ts +++ b/src/client/adapters/invidious/index.ts @@ -1,15 +1,14 @@ -import ky from "ky"; +import path from "path"; -import Video, { VideoModel } from "./typings/video"; -import Suggestions, { SuggestionsModel } from "./typings/search/suggestions"; +import ky from "ky"; import Adapter, { ApiType } from "@/client/adapters"; import Transformer from "./transformer"; - -import path from "path"; import Search, { SearchModel } from "./typings/search"; +import Suggestions, { SuggestionsModel } from "./typings/search/suggestions"; import Stream, { StreamModel } from "./typings/stream"; +import Video, { VideoModel } from "./typings/video"; const apiPath = (...paths: string[]): string => path.join("api", "v1", ...paths); diff --git a/src/client/adapters/invidious/transformer.ts b/src/client/adapters/invidious/transformer.ts index b576061..a0f6d09 100644 --- a/src/client/adapters/invidious/transformer.ts +++ b/src/client/adapters/invidious/transformer.ts @@ -1,20 +1,20 @@ -import { Video } from "@/client/typings/video"; +import { + ChannelItem, + Item, + PlaylistItem, + VideoItem +} from "@/client/typings/item"; import { Suggestions } from "@/client/typings/search/suggestions"; import { Stream } from "@/client/typings/stream"; +import { Video } from "@/client/typings/video"; -import InvidiousVideo from "./typings/video"; -import InvidiousSuggestions from "./typings/search/suggestions"; import InvidiousSearch from "./typings/search"; -import InvidiousThumbnail from "./typings/thumbnail"; +import InvidiousSuggestions from "./typings/search/suggestions"; import InvidiousStream, { RecommendedVideo as InvidiousRecommendedVideo } from "./typings/stream"; -import { - ChannelItem, - Item, - PlaylistItem, - VideoItem -} from "@/client/typings/item"; +import InvidiousThumbnail from "./typings/thumbnail"; +import InvidiousVideo from "./typings/video"; export default class Transformer { private static findBestThumbnail( diff --git a/src/client/adapters/invidious/typings/search/index.ts b/src/client/adapters/invidious/typings/search/index.ts index 77e4df5..082f6a3 100644 --- a/src/client/adapters/invidious/typings/search/index.ts +++ b/src/client/adapters/invidious/typings/search/index.ts @@ -1,4 +1,5 @@ import z from "zod"; + import { AuthorThumbnailModel, ThumbnailModel } from "../thumbnail"; import { VideoModel } from "../video"; diff --git a/src/client/adapters/invidious/typings/stream.ts b/src/client/adapters/invidious/typings/stream.ts index b55db4c..93afbb8 100644 --- a/src/client/adapters/invidious/typings/stream.ts +++ b/src/client/adapters/invidious/typings/stream.ts @@ -1,6 +1,7 @@ import z from "zod"; -import { AuthorThumbnailModel, ThumbnailModel } from "./thumbnail"; + import { StoryboardModel } from "./storyboard"; +import { AuthorThumbnailModel, ThumbnailModel } from "./thumbnail"; import { VideoModel } from "./video"; export const AdaptiveFormatModel = z.object({ diff --git a/src/client/adapters/invidious/typings/video.ts b/src/client/adapters/invidious/typings/video.ts index 3b3dadd..ee85262 100644 --- a/src/client/adapters/invidious/typings/video.ts +++ b/src/client/adapters/invidious/typings/video.ts @@ -1,4 +1,5 @@ import z from "zod"; + import { ThumbnailModel } from "./thumbnail"; export const VideoModel = z.object({ diff --git a/src/client/adapters/piped/index.ts b/src/client/adapters/piped/index.ts index 0995405..55e547a 100644 --- a/src/client/adapters/piped/index.ts +++ b/src/client/adapters/piped/index.ts @@ -1,15 +1,15 @@ -import z from "zod"; +import path from "path"; + import ky from "ky"; +import z from "zod"; import Adapter, { ApiType } from "@/client/adapters"; - -import Video, { VideoModel } from "./typings/video"; +import { Suggestions } from "@/client/typings/search/suggestions"; import Transformer from "./transformer"; -import { Suggestions } from "@/client/typings/search/suggestions"; import Search, { SearchModel } from "./typings/search"; -import path from "path"; import Stream, { StreamModel } from "./typings/stream"; +import Video, { VideoModel } from "./typings/video"; const getTrending = async ( apiBaseUrl: string, diff --git a/src/client/adapters/piped/transformer.ts b/src/client/adapters/piped/transformer.ts index 712d482..f147de7 100644 --- a/src/client/adapters/piped/transformer.ts +++ b/src/client/adapters/piped/transformer.ts @@ -1,21 +1,21 @@ -import { Video } from "@/client/typings/video"; -import { SearchResults } from "@/client/typings/search"; -import { Stream } from "@/client/typings/stream"; - -import PipedVideo from "./typings/video"; -import PipedSearch from "./typings/search"; -import PipedStream from "./typings/stream"; -import PipedItem from "./typings/item"; -import { - parseChannelIdFromUrl, - parseVideoIdFromUrl -} from "@/utils/parseIdFromUrl"; import { ChannelItem, Item, PlaylistItem, VideoItem } from "@/client/typings/item"; +import { SearchResults } from "@/client/typings/search"; +import { Stream } from "@/client/typings/stream"; +import { Video } from "@/client/typings/video"; +import { + parseChannelIdFromUrl, + parseVideoIdFromUrl +} from "@/utils/parseIdFromUrl"; + +import PipedItem from "./typings/item"; +import PipedSearch from "./typings/search"; +import PipedStream from "./typings/stream"; +import PipedVideo from "./typings/video"; export default class Transformer { private static item(data: PipedItem): Item { diff --git a/src/client/adapters/piped/typings/item.ts b/src/client/adapters/piped/typings/item.ts index 225e82e..e37b06c 100644 --- a/src/client/adapters/piped/typings/item.ts +++ b/src/client/adapters/piped/typings/item.ts @@ -1,4 +1,5 @@ import z from "zod"; + import { VideoModel } from "./video"; export const VideoItemModel = z diff --git a/src/client/adapters/piped/typings/stream.ts b/src/client/adapters/piped/typings/stream.ts index 754b626..b30ebcd 100644 --- a/src/client/adapters/piped/typings/stream.ts +++ b/src/client/adapters/piped/typings/stream.ts @@ -1,4 +1,5 @@ import z from "zod"; + import { ItemModel } from "./item"; export const AudioStreamModel = z.object({ diff --git a/src/client/index.ts b/src/client/index.ts index adb72d1..040e8ca 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -1,13 +1,11 @@ -import { Video } from "./typings/video"; - +import Adapter, { ApiType, ConnectedAdapter } from "./adapters"; import InvidiousAdapter from "./adapters/invidious"; import PipedAdapter from "./adapters/piped"; - -import Adapter, { ApiType, ConnectedAdapter } from "./adapters"; -import { Suggestions } from "./typings/search/suggestions"; import { SearchResults } from "./typings/search"; import { SearchOptions } from "./typings/search/options"; +import { Suggestions } from "./typings/search/suggestions"; import { Stream } from "./typings/stream"; +import { Video } from "./typings/video"; export interface RemoteApi { type: ApiType; diff --git a/src/components/Container.tsx b/src/components/Container.tsx index 1ec4b71..0fa94a2 100644 --- a/src/components/Container.tsx +++ b/src/components/Container.tsx @@ -1,6 +1,7 @@ -import { Component } from "@/typings/component"; import { navHeight } from "./Nav"; +import { Component } from "@/typings/component"; + export const Container: Component<{ navbarOffset?: boolean }> = ({ children, navbarOffset = true diff --git a/src/components/ContextMenu.tsx b/src/components/ContextMenu.tsx index 772c048..13324a2 100644 --- a/src/components/ContextMenu.tsx +++ b/src/components/ContextMenu.tsx @@ -1,4 +1,5 @@ import useContextMenuStore from "@/hooks/useContextMenuStore"; + import { Component } from "@/typings/component"; import { ContextMenuItem } from "@/typings/contextMenu"; diff --git a/src/components/LoadingPage.tsx b/src/components/LoadingPage.tsx index 9663caa..00e073a 100644 --- a/src/components/LoadingPage.tsx +++ b/src/components/LoadingPage.tsx @@ -1,8 +1,9 @@ "use client"; -import { Component } from "@/typings/component"; import { CircularProgress } from "@nextui-org/progress"; +import { Component } from "@/typings/component"; + export const LoadingPage: Component = () => { return (
diff --git a/src/components/Nav.tsx b/src/components/Nav.tsx index 2c915a6..442bfd6 100644 --- a/src/components/Nav.tsx +++ b/src/components/Nav.tsx @@ -1,17 +1,19 @@ "use client"; -import { Component } from "@/typings/component"; +import NextLink from "next/link"; +import { usePathname } from "next/navigation"; + +import { Button } from "@nextui-org/button"; +import { Link } from "@nextui-org/link"; import { Navbar, NavbarBrand, NavbarContent, NavbarItem } from "@nextui-org/navbar"; -import { Link } from "@nextui-org/link"; -import { Button } from "@nextui-org/button"; -import NextLink from "next/link"; -import { usePathname } from "next/navigation"; +import { Component } from "@/typings/component"; + // import { Search } from "./Search"; export const navHeight = 64; diff --git a/src/components/Search.tsx b/src/components/Search.tsx index 5bbb0b9..405e856 100644 --- a/src/components/Search.tsx +++ b/src/components/Search.tsx @@ -1,15 +1,18 @@ "use client"; -import { useClient } from "@/hooks/useClient"; -import { Component } from "@/typings/component"; -import { Autocomplete, AutocompleteItem } from "@nextui-org/autocomplete"; -import { useQuery } from "@tanstack/react-query"; -import { useCallback, useMemo, useState } from "react"; import { useDebounce } from "use-debounce"; +import { useQuery } from "@tanstack/react-query"; +import { useCallback, useMemo, useState } from "react"; import { FiSearch as SearchIcon } from "react-icons/fi"; + +import { Autocomplete, AutocompleteItem } from "@nextui-org/autocomplete"; + +import { useClient } from "@/hooks/useClient"; import { useSearch } from "@/hooks/useSearch"; +import { Component } from "@/typings/component"; + export const Search: Component<{ initialQueryValue?: string; }> = ({ initialQueryValue }) => { diff --git a/src/components/Video.tsx b/src/components/Video.tsx index dbce789..424dfc2 100644 --- a/src/components/Video.tsx +++ b/src/components/Video.tsx @@ -1,19 +1,22 @@ -import { Video as VideoProps } from "@/client/typings/video"; -import { Component } from "@/typings/component"; -import { Card, CardFooter, CardBody } from "@nextui-org/card"; -import { Image } from "@nextui-org/image"; -import { Divider } from "@nextui-org/divider"; +import NextImage from "next/image"; import Link from "next/link"; + +import { Card, CardBody, CardFooter } from "@nextui-org/card"; +import { Divider } from "@nextui-org/divider"; +import { Image } from "@nextui-org/image"; +import { Tooltip } from "@nextui-org/tooltip"; + +import { Video as VideoProps } from "@/client/typings/video"; import formatBigNumber from "@/utils/formatBigNumber"; import formatDuration from "@/utils/formatDuration"; -import { ContextMenu } from "./ContextMenu"; import formatUploadedTime from "@/utils/formatUploadedTime"; -import { Tooltip } from "@nextui-org/tooltip"; -import { ContextMenuItem } from "@/typings/contextMenu"; - -import NextImage from "next/image"; -import { videoSize } from "@/utils/videoSize"; import { channelUrl, videoUrl } from "@/utils/urls"; +import { videoSize } from "@/utils/videoSize"; + +import { ContextMenu } from "./ContextMenu"; + +import { Component } from "@/typings/component"; +import { ContextMenuItem } from "@/typings/contextMenu"; export const Video: Component<{ data: VideoProps }> = ({ data }) => { const url = videoUrl(data.id); diff --git a/src/hooks/useClient.ts b/src/hooks/useClient.ts index 3b7abfc..3a97878 100644 --- a/src/hooks/useClient.ts +++ b/src/hooks/useClient.ts @@ -1,8 +1,8 @@ +import { useState } from "react"; + import Client from "@/client"; import { ApiType } from "@/client/adapters"; -import { useState } from "react"; - export const useClient = () => { const [client] = useState( () => diff --git a/src/hooks/useContextMenuStore.ts b/src/hooks/useContextMenuStore.ts index 613a57e..1447ef7 100644 --- a/src/hooks/useContextMenuStore.ts +++ b/src/hooks/useContextMenuStore.ts @@ -1,6 +1,7 @@ -import { ContextMenuItem } from "@/typings/contextMenu"; import { create } from "zustand"; +import { ContextMenuItem } from "@/typings/contextMenu"; + interface Location { x: number; y: number; diff --git a/src/hooks/useSearch.ts b/src/hooks/useSearch.ts index 9cface0..3de5a9d 100644 --- a/src/hooks/useSearch.ts +++ b/src/hooks/useSearch.ts @@ -1,6 +1,7 @@ -import { SearchType } from "@/client/typings/search/options"; import { useRouter } from "next/navigation"; +import { SearchType } from "@/client/typings/search/options"; + const searchPathname = "/results"; export const useSearch = (): ((query: string, filter?: SearchType) => void) => { diff --git a/tailwind.config.ts b/tailwind.config.ts index b7d6386..47899c4 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,7 +1,7 @@ -import type { Config } from "tailwindcss"; - import { nextui } from "@nextui-org/react"; +import type { Config } from "tailwindcss"; + const config: Config = { content: [ "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", diff --git a/tsconfig.json b/tsconfig.json index 7b28589..dcfa651 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,26 @@ { - "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "compilerOptions": { + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/yarn.lock b/yarn.lock index 322be98..7c69ae9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,7 +29,7 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -37,6 +37,14 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" +"@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" @@ -63,16 +71,28 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" - integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== +"@babel/core@^7.24.0": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3" + integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.1" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.24.1" + "@babel/parser" "^7.24.1" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.23.6": +"@babel/generator@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== @@ -82,6 +102,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" + integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== + dependencies: + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -254,7 +284,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== -"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.22.20": +"@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== @@ -282,6 +312,15 @@ "@babel/traverse" "^7.24.0" "@babel/types" "^7.24.0" +"@babel/helpers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" + integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + "@babel/highlight@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" @@ -291,11 +330,26 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.20.5", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0": +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.24.0": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== +"@babel/parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" + integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" @@ -956,22 +1010,6 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/traverse@7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.24.0": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" @@ -988,15 +1026,23 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.24.1" + "@babel/types" "^7.24.0" + debug "^4.3.1" + globals "^11.1.0" -"@babel/types@^7.17.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.4.4": +"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.4.4": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== @@ -1005,14 +1051,14 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== @@ -1095,6 +1141,18 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== +"@ianvs/prettier-plugin-sort-imports@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@ianvs/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.2.1.tgz#b5665a130ab882741df6d5ccd423f002ae065ad8" + integrity sha512-NKN1LVFWUDGDGr3vt+6Ey3qPeN/163uR1pOPAlkWpgvAqgxQ6kSdUf1F0it8aHUtKRUzEGcK38Wxd07O61d7+Q== + dependencies: + "@babel/core" "^7.24.0" + "@babel/generator" "^7.23.6" + "@babel/parser" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" + semver "^7.5.2" + "@internationalized/date@^3.5.2": version "3.5.2" resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.5.2.tgz#d760ace32bb47e869b8c607a4a786c8b208aacc2" @@ -1186,10 +1244,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.3.tgz#73007b64d487bbb95ed83145195f734fc1182d10" integrity sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ== -"@next/eslint-plugin-next@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz#31ffb36dbd5d04537aff83eb69ec23007d081608" - integrity sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww== +"@next/eslint-plugin-next@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz#d7372b5ffede0e466af8af2ff534386418827fc8" + integrity sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA== dependencies: glob "10.3.10" @@ -2147,6 +2205,11 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + "@react-aria/breadcrumbs@^3.5.7": version "3.5.11" resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.11.tgz#993898f81e01e7dcc1e3aff82b3ae939e55a1030" @@ -2964,6 +3027,13 @@ dependencies: tslib "^2.4.0" +"@tanstack/eslint-plugin-query@^5.28.6": + version "5.28.6" + resolved "https://registry.yarnpkg.com/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.28.6.tgz#55eef14ab75bc2a3685e8104657c3da009ce2644" + integrity sha512-kIvdN/EvbOrk4bbXOBm/Ik+uhQl5hawikkF5dLLmlvK3aZJzwRaRGpezYDM5Xw/6GCsATy+woh+Wvzj//BRvsg== + dependencies: + "@typescript-eslint/utils" "^6.20.0" + "@tanstack/query-core@5.27.5": version "5.27.5" resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.27.5.tgz#de4ede2094d490d0147e943212fcda51f09c0f69" @@ -2988,18 +3058,6 @@ dependencies: "@tanstack/query-core" "5.27.5" -"@trivago/prettier-plugin-sort-imports@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz#725f411646b3942193a37041c84e0b2116339789" - integrity sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ== - dependencies: - "@babel/generator" "7.17.7" - "@babel/parser" "^7.20.5" - "@babel/traverse" "7.23.2" - "@babel/types" "7.17.0" - javascript-natural-sort "0.7.1" - lodash "^4.17.21" - "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -3013,7 +3071,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -3084,11 +3142,33 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + "@types/trusted-types@^2.0.2": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== +"@typescript-eslint/eslint-plugin@^7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz#0d8f38a6c8a1802139e62184ee7a68ed024f30a1" + integrity sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "7.3.1" + "@typescript-eslint/type-utils" "7.3.1" + "@typescript-eslint/utils" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/parser@^5.4.2 || ^6.0.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" @@ -3100,6 +3180,17 @@ "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" +"@typescript-eslint/parser@^7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.3.1.tgz#c4ba7dc2744318a5e4506596cbc3a0086255c526" + integrity sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw== + dependencies: + "@typescript-eslint/scope-manager" "7.3.1" + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/typescript-estree" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" + debug "^4.3.4" + "@typescript-eslint/scope-manager@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" @@ -3108,11 +3199,34 @@ "@typescript-eslint/types" "6.21.0" "@typescript-eslint/visitor-keys" "6.21.0" +"@typescript-eslint/scope-manager@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz#73fd0cb4211a7be23e49e5b6efec8820caa6ec36" + integrity sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag== + dependencies: + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" + +"@typescript-eslint/type-utils@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz#cbf90d3d7e788466aa8a5c0ab3f46103f098aa0d" + integrity sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw== + dependencies: + "@typescript-eslint/typescript-estree" "7.3.1" + "@typescript-eslint/utils" "7.3.1" + debug "^4.3.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/types@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.3.1.tgz#ae104de8efa4227a462c0874d856602c5994413c" + integrity sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw== + "@typescript-eslint/typescript-estree@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" @@ -3127,6 +3241,46 @@ semver "^7.5.4" ts-api-utils "^1.0.1" +"@typescript-eslint/typescript-estree@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz#598848195fad34c7aa73f548bd00a4d4e5f5e2bb" + integrity sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ== + dependencies: + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.3.1.tgz#fc28fd508ccf89495012561b7c02a6fdad162460" + integrity sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.3.1" + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/typescript-estree" "7.3.1" + semver "^7.5.4" + +"@typescript-eslint/utils@^6.20.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + "@typescript-eslint/visitor-keys@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" @@ -3135,6 +3289,14 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz#6ddef14a3ce2a79690f01176f5305c34d7b93d8c" + integrity sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw== + dependencies: + "@typescript-eslint/types" "7.3.1" + eslint-visitor-keys "^3.4.1" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -3971,12 +4133,12 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@14.1.3: - version "14.1.3" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.3.tgz#f5c75c088c5df35da2a02129cbf5dec9defb3f13" - integrity sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg== +eslint-config-next@^14.1.4: + version "14.1.4" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.4.tgz#22f2ba4c0993e991249d863656a64c204bae542c" + integrity sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g== dependencies: - "@next/eslint-plugin-next" "14.1.3" + "@next/eslint-plugin-next" "14.1.4" "@rushstack/eslint-patch" "^1.3.3" "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" eslint-import-resolver-node "^0.3.6" @@ -3986,6 +4148,11 @@ eslint-config-next@14.1.3: eslint-plugin-react "^7.33.2" eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" @@ -4015,7 +4182,15 @@ eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" -eslint-plugin-import@^2.28.1: +eslint-plugin-css-modules@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-css-modules/-/eslint-plugin-css-modules-2.12.0.tgz#c4102c390c7efd68c4d53677c5e763971699322c" + integrity sha512-ruFBdad69ABrbCDCh5mXj7UzNmrvytfzPACjyvZWIAjFZAG8BXpYSbqmE8gU5wF+pIzV3jU2CWhLvfekXT/IgQ== + dependencies: + gonzales-pe "^4.3.0" + lodash "^4.17.2" + +eslint-plugin-import@^2.28.1, eslint-plugin-import@^2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== @@ -4060,6 +4235,14 @@ eslint-plugin-jsx-a11y@^6.7.1: object.entries "^1.1.7" object.fromentries "^2.0.7" +eslint-plugin-prettier@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" + "eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" @@ -4189,6 +4372,11 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" @@ -4475,6 +4663,13 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +gonzales-pe@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -4543,7 +4738,7 @@ idb@^7.0.1: resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== -ignore@^5.2.0: +ignore@^5.2.0, ignore@^5.2.4: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== @@ -4859,11 +5054,6 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -javascript-natural-sort@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" - integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== - jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -5092,7 +5282,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== -lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.2, lodash@^4.17.20: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5181,7 +5371,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -5587,6 +5777,18 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -5902,7 +6104,7 @@ semver@^6.0.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.4: +semver@^7.5.2, semver@^7.5.4: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== @@ -6002,11 +6204,6 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -6174,6 +6371,14 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +synckit@^0.8.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + tailwind-merge@^1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b" @@ -6313,7 +6518,7 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==