aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--components/footer.js2
-rw-r--r--components/hero/content.js119
-rw-r--r--components/media/aniList.js2
-rw-r--r--components/navbar.js22
-rw-r--r--components/videoPlayer.js32
-rw-r--r--lib/AniList.js1
-rw-r--r--lib/useAnilist.js82
-rw-r--r--lib/useNotify.js41
-rw-r--r--package-lock.json994
-rw-r--r--package.json1
-rw-r--r--pages/anime/[...id].js38
-rw-r--r--pages/anime/watch/[...info].js131
-rw-r--r--pages/api/getUser.js20
-rw-r--r--pages/api/update-user.js21
-rw-r--r--pages/dmca.js2
-rw-r--r--pages/index.js281
-rw-r--r--pages/search.js9
-rw-r--r--pages/test.js21
-rw-r--r--pages/testing.js34
-rw-r--r--styles/globals.css6
-rw-r--r--tailwind.config.js1
21 files changed, 645 insertions, 1215 deletions
diff --git a/components/footer.js b/components/footer.js
index 3143070..4284dcf 100644
--- a/components/footer.js
+++ b/components/footer.js
@@ -5,7 +5,7 @@ import Image from "next/image";
function Footer() {
return (
- <section className=" text-white z-50 bg-black md:flex md:h-[14rem] md:items-center md:justify-between">
+ <section className=" text-white z-40 bg-black md:flex md:h-[14rem] md:items-center md:justify-between">
<div className="mx-auto flex w-[78%] flex-col space-y-10 py-10 md:flex-row md:items-center md:justify-between md:space-y-0 md:py-0">
<div className="md:flex md:flex-col md:gap-y-[3.88rem]">
<h1 className="font-outfit text-[2.56rem]">moopa</h1>
diff --git a/components/hero/content.js b/components/hero/content.js
index 532e4a6..a3db854 100644
--- a/components/hero/content.js
+++ b/components/hero/content.js
@@ -1,9 +1,12 @@
import Link from "next/link";
-import React from "react";
+import React, { useState } from "react";
import Image from "next/image";
import { MdChevronLeft, MdChevronRight } from "react-icons/md";
export default function Content({ ids, section, data }) {
+ const [scrollLeft, setScrollLeft] = useState(false);
+ const [scrollRight, setScrollRight] = useState(true);
+
const slideLeft = () => {
var slider = document.getElementById(ids);
slider.scrollLeft = slider.scrollLeft - 500;
@@ -13,65 +16,75 @@ export default function Content({ ids, section, data }) {
slider.scrollLeft = slider.scrollLeft + 500;
};
+ const handleScroll = (e) => {
+ const scrollLeft = e.target.scrollLeft > 31;
+ const scrollRight =
+ e.target.scrollLeft < e.target.scrollWidth - e.target.clientWidth;
+ setScrollLeft(scrollLeft);
+ setScrollRight(scrollRight);
+ };
+
+ // console.log({ left: scrollLeft, right: scrollRight });
+
const array = data;
const filteredData = array.filter((item) => item.status !== "Unknown");
return (
<div>
- <h1 className="px-5 font-outfit text-[20px] font-extrabold lg:text-[27px]">
- {section}
- </h1>
- <div className="py-10">
- <div className="relative flex items-center lg:gap-2">
- <MdChevronLeft
- onClick={slideLeft}
- size={40}
- className="mb-5 cursor-pointer opacity-50 hover:opacity-100"
- />
- <div
- id={ids}
- className="scroll flex h-full w-full items-center overflow-x-scroll scroll-smooth whitespace-nowrap overflow-y-hidden scrollbar-hide lg:gap-5"
- >
- {filteredData.map((anime) => {
- const url = encodeURIComponent(
- anime.title.english || anime.title.romaji
- );
-
- return (
- <div
- key={anime.id}
- className="flex shrink-0 cursor-pointer items-center"
+ <h1 className="px-5 font-karla text-[20px] font-bold">{section}</h1>
+ <div className="relative flex items-center lg:gap-2">
+ <MdChevronLeft
+ onClick={slideLeft}
+ size={35}
+ className={`mb-5 cursor-pointer absolute left-0 bg-gradient-to-r from-[#141519] z-40 h-full hover:opacity-100 ${
+ scrollLeft ? "visible" : "hidden"
+ }`}
+ />
+ <div
+ id={ids}
+ className="scroll flex h-full w-full items-center select-none overflow-x-scroll scroll-smooth whitespace-nowrap overflow-y-hidden scrollbar-hide lg:gap-8 gap-5 p-10 z-30 "
+ onScroll={handleScroll}
+ >
+ {filteredData.map((anime) => {
+ return (
+ <div
+ key={anime.id}
+ className="flex shrink-0 cursor-pointer items-center"
+ >
+ <Link
+ href={`/anime/${anime.id}`}
+ className="hover:scale-105 duration-300 ease-in-out"
>
- <Link href={`/anime/${anime.id}`}>
- <Image
- draggable={false}
- src={
- anime.image ||
- anime.coverImage?.extraLarge ||
- "https://cdn.discordapp.com/attachments/986579286397964290/1058415946945003611/gray_pfp.png"
- }
- alt={anime.title.romaji || anime.title.english}
- width={209}
- height={300}
- placeholder="blur"
- blurDataURL={
- anime.image ||
- anime.coverImage?.extraLarge ||
- "https://cdn.discordapp.com/attachments/986579286397964290/1058415946945003611/gray_pfp.png"
- }
- className="z-20 h-[230px] w-[168px] object-cover p-2 duration-300 ease-in-out hover:scale-105 lg:h-[290px] lg:w-[209px]"
- />
- </Link>
- </div>
- );
- })}
- </div>
- <MdChevronRight
- onClick={slideRight}
- size={40}
- className="mb-5 cursor-pointer opacity-50 hover:opacity-100"
- />
+ <Image
+ draggable={false}
+ src={
+ anime.image ||
+ anime.coverImage?.extraLarge ||
+ "https://cdn.discordapp.com/attachments/986579286397964290/1058415946945003611/gray_pfp.png"
+ }
+ alt={anime.title.romaji || anime.title.english}
+ width={209}
+ height={300}
+ placeholder="blur"
+ blurDataURL={
+ anime.image ||
+ anime.coverImage?.extraLarge ||
+ "https://cdn.discordapp.com/attachments/986579286397964290/1058415946945003611/gray_pfp.png"
+ }
+ className="z-20 h-[192px] w-[135px] object-cover lg:h-[265px] lg:w-[185px] rounded-md"
+ />
+ </Link>
+ </div>
+ );
+ })}
</div>
+ <MdChevronRight
+ onClick={slideRight}
+ size={30}
+ className={`mb-5 cursor-pointer absolute right-0 bg-gradient-to-l from-[#141519] z-40 h-full hover:opacity-100 hover:bg-gradient-to-l ${
+ scrollRight ? "visible" : "hidden"
+ }`}
+ />
</div>
</div>
);
diff --git a/components/media/aniList.js b/components/media/aniList.js
index 3f319c2..5cf65ba 100644
--- a/components/media/aniList.js
+++ b/components/media/aniList.js
@@ -13,7 +13,7 @@ function AniList() {
d="M27.825 21.773V2.977c0-1.077-.613-1.672-1.725-1.672h-3.795c-1.111 0-1.725.595-1.725 1.672v8.927c0 .251 2.5 1.418 2.565 1.665 1.904 7.21.414 12.982-1.392 13.251 2.952.142 3.277 1.517 1.078.578.337-3.848 1.65-3.84 5.422-.142.032.032.774 1.539.82 1.539h8.91c1.113 0 1.726-.594 1.726-1.672v-3.677c0-1.078-.614-1.672-1.725-1.672H27.825z"
></path>
<path
- fill="#585858"
+ fill="#fff"
d="M12.07 1.306l-9.966 27.49h7.743l1.687-4.756h8.433l1.649 4.755h7.705l-9.929-27.49H12.07zm1.227 16.642l2.415-7.615 2.645 7.615h-5.06z"
></path>
</g>
diff --git a/components/navbar.js b/components/navbar.js
index 3a8c5de..e0c1047 100644
--- a/components/navbar.js
+++ b/components/navbar.js
@@ -1,8 +1,11 @@
import React, { useState, useEffect } from "react";
import { useTheme } from "next-themes";
import Link from "next/link";
+import { useSession, signIn, signOut } from "next-auth/react";
+import Image from "next/image";
function Navbar(props) {
+ const { data: session, status } = useSession();
const [isVisible, setIsVisible] = useState(false);
const [fade, setFade] = useState(false);
const { systemTheme, theme, setTheme } = useTheme();
@@ -22,6 +25,8 @@ function Navbar(props) {
setFade(false);
};
+ // console.log(session.user?.image);
+
return (
<header className={`${props.className}`}>
<div className="flex h-16 w-auto items-center justify-between px-5 md:mx-auto md:w-[80%] md:px-0 text-white">
@@ -181,7 +186,7 @@ function Navbar(props) {
</div>
<nav className="left-0 top-[-100%] hidden w-auto items-center gap-10 px-5 md:flex">
- <ul className="hidden gap-10 font-roboto text-xl md:flex ">
+ <ul className="hidden gap-10 font-roboto text-xl md:flex items-center">
<li>
<Link
href="/"
@@ -206,6 +211,21 @@ function Navbar(props) {
search
</Link>
</li>
+ {!session && (
+ <li>
+ <button
+ onClick={() => signIn("AniListProvider")}
+ className="ring-1 ring-action font-karla font-bold p-2 rounded-md"
+ >
+ Sign in
+ </button>
+ </li>
+ )}
+ {session && (
+ <li className="h-16 w-16 p-2">
+ <img src={session?.user.image.large} alt="imagine" />
+ </li>
+ )}
</ul>
</nav>
</div>
diff --git a/components/videoPlayer.js b/components/videoPlayer.js
index c680430..e568772 100644
--- a/components/videoPlayer.js
+++ b/components/videoPlayer.js
@@ -1,10 +1,22 @@
import Player from "../lib/Artplayer";
import { useEffect, useState } from "react";
+import { useAniList } from "../lib/useAnilist";
-export default function VideoPlayer({ data, seek, titles, id }) {
+export default function VideoPlayer({
+ data,
+ seek,
+ titles,
+ id,
+ progress,
+ session,
+ aniId,
+}) {
const [url, setUrl] = useState();
const [source, setSource] = useState([]);
const [loading, setLoading] = useState(true);
+ const { markProgress } = useAniList(session);
+
+ // console.log(progress);
useEffect(() => {
async function compiler() {
@@ -70,6 +82,24 @@ export default function VideoPlayer({ data, seek, titles, id }) {
});
art.on("destroy", () => {
+ const currentTime = art.currentTime;
+ const duration = art.duration;
+ const percentage = currentTime / duration;
+
+ if (percentage >= 0.9) {
+ // use >= instead of >
+ markProgress(aniId, progress);
+ } else {
+ console.log("Something went wrong");
+ }
+ });
+
+ art.on("video:ended", () => {
+ art.destroy();
+ console.log("Video ended");
+ });
+
+ art.on("destroy", () => {
const lastPlayed = {
id: id,
time: art.currentTime,
diff --git a/lib/AniList.js b/lib/AniList.js
index 2b65789..f602dad 100644
--- a/lib/AniList.js
+++ b/lib/AniList.js
@@ -3,7 +3,6 @@ export async function aniListData({ sort, page = 1 }) {
method: "POST",
headers: {
"Content-Type": "application/json",
- Accept: "application/json",
},
body: JSON.stringify({
query: `
diff --git a/lib/useAnilist.js b/lib/useAnilist.js
index b95293f..12317f8 100644
--- a/lib/useAnilist.js
+++ b/lib/useAnilist.js
@@ -4,6 +4,8 @@ export function useAniList(session) {
const [media, setMedia] = useState([]);
// const [aniAdvanceSearch, setAniAdvanceSearch] = useState([]);
+ // Queries
+
const queryMedia = `
query ($username: String) {
MediaListCollection(userName: $username, type: ANIME) {
@@ -62,6 +64,29 @@ export function useAniList(session) {
}
`;
+ // Mutations
+
+ const completeQuery = `
+ mutation($mediaId: Int ) {
+ SaveMediaListEntry(mediaId: $mediaId, status: COMPLETED) {
+ id
+ mediaId
+ status
+ }
+ }
+ `;
+
+ const progressWatched = `
+ mutation($mediaId: Int, $progress: Int) {
+ SaveMediaListEntry(mediaId: $mediaId, progress: $progress) {
+ id
+ mediaId
+ progress
+ status
+ }
+ }
+ `;
+
const username = session?.user?.name;
const accessToken = session?.user?.token;
@@ -89,9 +114,55 @@ export function useAniList(session) {
fetchData();
}, [queryMedia, username, accessToken]);
- // useEffect(() => {
- // async function fetchData() {}
- // });
+ async function markComplete(mediaId) {
+ if (!accessToken) return;
+ const response = await fetch("https://graphql.anilist.co/", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${accessToken}`,
+ },
+ body: JSON.stringify({
+ query: completeQuery,
+ variables: {
+ mediaId: mediaId,
+ },
+ }),
+ });
+ if (response.ok) {
+ const data = await response.json();
+ console.log({ Complete: data });
+ } else if (response.status === 401) {
+ console.log("Unauthorized");
+ } else if (response.status === 400) {
+ console.log("validation error");
+ }
+ }
+
+ async function markProgress(mediaId, progress) {
+ if (!accessToken) return;
+ const response = await fetch("https://graphql.anilist.co/", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${accessToken}`,
+ },
+ body: JSON.stringify({
+ query: progressWatched,
+ variables: {
+ mediaId: mediaId,
+ progress: progress,
+ },
+ }),
+ });
+ if (response.ok) {
+ console.log("Progress Updated");
+ } else if (response.status === 401) {
+ console.log("Unauthorized");
+ } else if (response.status === 400) {
+ console.log("validation error");
+ }
+ }
async function aniAdvanceSearch(
search,
@@ -123,14 +194,15 @@ export function useAniList(session) {
});
const datas = await response.json();
- console.log(search);
+ // console.log(search);
const data = datas.data.Page;
return data;
}
return {
media,
- // updateMediaEntry,
+ markComplete,
aniAdvanceSearch,
+ markProgress,
};
}
diff --git a/lib/useNotify.js b/lib/useNotify.js
new file mode 100644
index 0000000..e6ba7e6
--- /dev/null
+++ b/lib/useNotify.js
@@ -0,0 +1,41 @@
+import { useState, useCallback } from "react";
+import { motion as m, AnimatePresence } from "framer-motion";
+
+export const useNotification = () => {
+ const [showNotification, setShowNotification] = useState(false);
+ const [notificationMessage, setNotificationMessage] = useState("");
+
+ const show = useCallback(
+ (message) => {
+ setNotificationMessage(message);
+ setShowNotification(true);
+ setTimeout(() => {
+ setShowNotification(false);
+ }, 5000);
+ },
+ [setNotificationMessage, setShowNotification]
+ );
+
+ const NotificationComponent = () => {
+ return (
+ <AnimatePresence>
+ {showNotification && (
+ <m.div
+ key="teasa"
+ transition={{ duration: 0.5 }}
+ initial={{ opacity: 0, y: 100 }}
+ animate={{ opacity: 1, y: 0 }}
+ exit={{ opacity: 0, y: 100 }}
+ className="z-50 fixed bottom-10 w-screen flex justify-center text-center"
+ >
+ <div className="bg-green-600 text-white px-2 py-2 font-bold rounded-[30px]">
+ {notificationMessage}
+ </div>
+ </m.div>
+ )}
+ </AnimatePresence>
+ );
+ };
+
+ return { Notification: NotificationComponent, show };
+};
diff --git a/package-lock.json b/package-lock.json
index 3b71d81..8893601 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,7 +17,6 @@
"axios": "^1.2.2",
"closest-match": "^1.3.3",
"crypto": "^1.0.1",
- "cssnano": "^6.0.0",
"disqus-react": "^1.1.5",
"framer-motion": "^8.5.0",
"gql": "^1.1.2",
@@ -3196,14 +3195,6 @@
"tslib": "^2.4.0"
}
},
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/@types/eslint": {
"version": "8.21.1",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz",
@@ -3947,17 +3938,6 @@
"node": ">= 6"
}
},
- "node_modules/caniuse-api": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
- "dependencies": {
- "browserslist": "^4.0.0",
- "caniuse-lite": "^1.0.0",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
"node_modules/caniuse-lite": {
"version": "1.0.30001460",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001460.tgz",
@@ -4139,11 +4119,6 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
- },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -4231,17 +4206,6 @@
"node": ">=8"
}
},
- "node_modules/css-declaration-sorter": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz",
- "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==",
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.0.9"
- }
- },
"node_modules/css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -4257,18 +4221,6 @@
"url": "https://github.com/sponsors/fb55"
}
},
- "node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
"node_modules/css-what": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
@@ -4284,6 +4236,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
"bin": {
"cssesc": "bin/cssesc"
},
@@ -4291,108 +4244,6 @@
"node": ">=4"
}
},
- "node_modules/cssnano": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
- "integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==",
- "dependencies": {
- "cssnano-preset-default": "^6.0.0",
- "lilconfig": "^2.1.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/cssnano"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-preset-default": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz",
- "integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==",
- "dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.0",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "dependencies": {
- "css-tree": "~2.2.0"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
- },
"node_modules/csstype": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
@@ -6076,9 +5927,10 @@
}
},
"node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
+ "dev": true,
"engines": {
"node": ">=10"
}
@@ -6132,21 +5984,11 @@
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
},
- "node_modules/lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
- },
"node_modules/lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
},
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
- },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -6222,11 +6064,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
- },
"node_modules/media-captions": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/media-captions/-/media-captions-0.0.7.tgz",
@@ -6832,6 +6669,7 @@
"version": "8.4.20",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
"integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -6851,94 +6689,6 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/postcss-calc": {
- "version": "8.2.4",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
- "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
- "dependencies": {
- "postcss-selector-parser": "^6.0.9",
- "postcss-value-parser": "^4.2.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.2"
- }
- },
- "node_modules/postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-import": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
@@ -7004,98 +6754,6 @@
}
}
},
- "node_modules/postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-merge-rules": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz",
- "integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==",
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dependencies": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dependencies": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-nested": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
@@ -7115,178 +6773,11 @@
"postcss": "^8.2.14"
}
},
- "node_modules/postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dependencies": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-selector-parser": {
"version": "6.0.11",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
+ "dev": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -7295,39 +6786,11 @@
"node": ">=4"
}
},
- "node_modules/postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >= 18"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
},
"node_modules/preact": {
"version": "10.13.2",
@@ -8112,21 +7575,6 @@
}
}
},
- "node_modules/stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/sucrase": {
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz",
@@ -8190,37 +7638,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
- "dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.2.1",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "svgo": "bin/svgo"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/svgo"
- }
- },
- "node_modules/svgo/node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/symbol-observable": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
@@ -11480,11 +10897,6 @@
"tslib": "^2.4.0"
}
},
- "@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="
- },
"@types/eslint": {
"version": "8.21.1",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz",
@@ -12070,17 +11482,6 @@
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
"dev": true
},
- "caniuse-api": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
- "requires": {
- "browserslist": "^4.0.0",
- "caniuse-lite": "^1.0.0",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
"caniuse-lite": {
"version": "1.0.30001460",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001460.tgz",
@@ -12215,11 +11616,6 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
- },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -12287,12 +11683,6 @@
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
"integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="
},
- "css-declaration-sorter": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz",
- "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==",
- "requires": {}
- },
"css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -12305,15 +11695,6 @@
"nth-check": "^2.0.1"
}
},
- "css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
- "requires": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- }
- },
"css-what": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
@@ -12322,82 +11703,8 @@
"cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
- },
- "cssnano": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
- "integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==",
- "requires": {
- "cssnano-preset-default": "^6.0.0",
- "lilconfig": "^2.1.0"
- }
- },
- "cssnano-preset-default": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz",
- "integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==",
- "requires": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.0",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- }
- },
- "cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "requires": {}
- },
- "csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "requires": {
- "css-tree": "~2.2.0"
- },
- "dependencies": {
- "css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "requires": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- }
- },
- "mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
- }
- }
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
},
"csstype": {
"version": "3.1.1",
@@ -13605,9 +12912,10 @@
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
},
"lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
+ "dev": true
},
"lines-and-columns": {
"version": "1.2.4",
@@ -13649,21 +12957,11 @@
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
},
- "lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
- },
"lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
},
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
- },
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -13719,11 +13017,6 @@
}
}
},
- "mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
- },
"media-captions": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/media-captions/-/media-captions-0.0.7.tgz",
@@ -14150,65 +13443,13 @@
"version": "8.4.20",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
"integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
+ "dev": true,
"requires": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
},
- "postcss-calc": {
- "version": "8.2.4",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
- "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
- "requires": {
- "postcss-selector-parser": "^6.0.9",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "requires": {}
- },
- "postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "requires": {}
- },
- "postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "requires": {}
- },
- "postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "requires": {}
- },
"postcss-import": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
@@ -14239,62 +13480,6 @@
"yaml": "^1.10.2"
}
},
- "postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- }
- },
- "postcss-merge-rules": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz",
- "integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==",
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- }
- },
- "postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "requires": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "requires": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
"postcss-nested": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
@@ -14304,133 +13489,21 @@
"postcss-selector-parser": "^6.0.10"
}
},
- "postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "requires": {}
- },
- "postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "requires": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- }
- },
- "postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
"postcss-selector-parser": {
"version": "6.0.11",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
+ "dev": true,
"requires": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
}
},
- "postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- }
- },
- "postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
"postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
},
"preact": {
"version": "10.13.2",
@@ -14991,15 +14064,6 @@
"client-only": "0.0.1"
}
},
- "stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- }
- },
"sucrase": {
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz",
@@ -15043,26 +14107,6 @@
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
},
- "svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
- "requires": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.2.1",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
- },
- "dependencies": {
- "commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
- }
- }
- },
"symbol-observable": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
diff --git a/package.json b/package.json
index 3c3cb0e..5ba87ef 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,6 @@
"axios": "^1.2.2",
"closest-match": "^1.3.3",
"crypto": "^1.0.1",
- "cssnano": "^6.0.0",
"disqus-react": "^1.1.5",
"framer-motion": "^8.5.0",
"gql": "^1.1.2",
diff --git a/pages/anime/[...id].js b/pages/anime/[...id].js
index d42a394..c2e69e1 100644
--- a/pages/anime/[...id].js
+++ b/pages/anime/[...id].js
@@ -75,7 +75,9 @@ export default function Himitsu({
if (!Array.isArray(existingData)) {
existingData = [];
}
- const index = existingData.findIndex((item) => item.title === props.title);
+ const index = existingData.findIndex(
+ (item) => item.title.romaji === props.title.romaji
+ );
if (index !== -1) {
existingData.splice(index, 1);
}
@@ -176,13 +178,17 @@ export default function Himitsu({
href={`/anime/watch/${epi1[0].id}/${info.id}`}
onClick={() =>
handleStore({
- title:
- info.title?.english ||
- info.title.romaji ||
- info.title.native,
+ title: {
+ romaji:
+ info.title.romaji ||
+ info.title.english ||
+ info.title.native,
+ },
description: info.description,
- image: info.image,
- id: info.id,
+ coverImage: {
+ extraLarge: info.image,
+ },
+ id: parseInt(info.id),
})
}
>
@@ -358,7 +364,7 @@ export default function Himitsu({
className="object-cover h-full w-full shrink-0 rounded-l-md"
/>
</div>
- <div className="min-w-[80%] h-full grid px-3 items-center">
+ <div className="h-full grid px-3 items-center">
<div className="text-action font-outfit font-bold">
{relation.relationType}
</div>
@@ -415,13 +421,17 @@ export default function Himitsu({
<Link
onClick={() =>
handleStore({
- title:
- info.title?.english ||
- info.title.romaji ||
- info.title.native,
+ title: {
+ romaji:
+ info.title.romaji ||
+ info.title.english ||
+ info.title.native,
+ },
description: info.description,
- image: info.image,
- id: info.id,
+ coverImage: {
+ extraLarge: info.image,
+ },
+ id: parseInt(info.id),
})
}
href={`/anime/watch/${episode.id}/${info.id}/${
diff --git a/pages/anime/watch/[...info].js b/pages/anime/watch/[...info].js
index 73e04f5..ed1a50b 100644
--- a/pages/anime/watch/[...info].js
+++ b/pages/anime/watch/[...info].js
@@ -9,17 +9,59 @@ import Head from "next/head";
import { useEffect, useState } from "react";
import Modal from "../../../components/modal";
+import { useNotification } from "../../../lib/useNotify";
+
+import { useSession, signIn, signOut } from "next-auth/react";
+import AniList from "../../../components/media/aniList";
+
+import { AnimatePresence, motion as m } from "framer-motion";
+import Navbar from "../../../components/navbar";
+import { Navigasi } from "../..";
+
export default function Info({ info }) {
+ const { data: session, status } = useSession();
const title = info.aniData.title.romaji || info.aniData.title.english;
const data = info.aniData;
const fallback = info.epiFallback;
+ const { Notification: NotificationComponent, show } = useNotification();
+
+ // console.log(session);
+
+ const playingEpisode = data.episodes
+ .filter((item) => item.id == info.id)
+ .map((item) => item.number);
const [open, setOpen] = useState(false);
+ const [aniStatus, setAniStatus] = useState("");
+ const [aniProgress, setAniProgress] = useState(parseInt(playingEpisode));
+
+ const handleStatus = (e) => {
+ setAniStatus(e.target.value);
+ };
+
+ const handleProgress = (e) => {
+ const value = parseFloat(e.target.value);
+ if (!isNaN(value) && value >= 0 && value <= data.totalEpisodes) {
+ setAniProgress(value);
+ }
+ };
+
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ const formData = { status: aniStatus, progress: aniProgress };
+ console.log(formData);
+ };
const playingTitle = data.episodes
.filter((item) => item.id == info.id)
.map((item) => item.title);
+ if (status === "loading") {
+ return <p>Loading...</p>;
+ }
+
+ console.log(parseInt(playingEpisode));
+
return (
<>
<Head>
@@ -27,29 +69,91 @@ export default function Info({ info }) {
{fallback ? data.title.romaji || data.title.english : playingTitle}
</title>
</Head>
+
+ <NotificationComponent />
+
<Modal open={open} onClose={() => setOpen(false)}>
- <div className="bg-[#202020] rounded-lg w-[268px] text-center">
+ <div className="bg-[#202020] rounded-lg text-center">
<div className="p-5 grid gap-2 justify-center place-items-center">
<h1 className="text-md font-extrabold font-karla">
Save this Anime to Your List
</h1>
- <h1 className="text-sm font-karla font-extralight w-[205px]">
- Are you sure you want to save this anime to your list?
- </h1>
- <div className="flex gap-12 items-center pt-3 justify-between">
- <button className="p-2 font-karla font-extrabold text-sm bg-[#93FF3E] w-[84px] rounded-[10px] text-black shadow">
- YES
- </button>
+ {!session && (
<button
- onClick={() => setOpen(false)}
- className="p-2 font-karla font-extrabold text-sm bg-white w-[84px] rounded-[10px] text-black shadow-lg"
+ className="flex items-center bg-[#3a3a3a] mt-4 rounded-md text-white p-1"
+ onClick={() => signIn("AniListProvider")}
>
- NO
+ <h1 className="px-1 font-bold font-karla">
+ Login with AniList
+ </h1>
+ <div className="scale-[60%] pb-[1px]">
+ <AniList />
+ </div>
</button>
- </div>
+ )}
+ {session && (
+ <>
+ <form
+ onSubmit={handleSubmit}
+ className="grid grid-cols-2 gap-5 max-w-sm mx-auto mt-5 items-center"
+ >
+ <div className="mb-4">
+ <label
+ htmlFor="option"
+ className="block font-bold mb-2 text-sm"
+ >
+ Select an option
+ </label>
+ <select
+ id="option"
+ value={aniStatus}
+ onChange={handleStatus}
+ className="form-select block w-full px-2 py-1 rounded-lg shadow-sm focus:outline-none focus:shadow-outline-blue focus:border-blue-300"
+ >
+ {aniStatus === "" && (
+ <option value="" hidden>
+ Select an option
+ </option>
+ )}
+ <option value="option1">Option 1</option>
+ <option value="option2">Option 2</option>
+ <option value="option3">Option 3</option>
+ </select>
+ </div>
+ <div className="mb-4">
+ <label
+ htmlFor="number"
+ className="block text-sm font-bold mb-2"
+ >
+ Episode Progress
+ </label>
+ <input
+ id="number"
+ type="number"
+ step="1"
+ min="0"
+ max={data.totalEpisodes}
+ className="form-input block w-full px-2 py-1 rounded-lg shadow-sm focus:outline-none focus:shadow-outline-blue focus:border-blue-300"
+ value={aniProgress}
+ onChange={handleProgress}
+ />
+ </div>
+ <div className="col-start-2 row-start-2 w-full justify-items-end text-center">
+ <button
+ type="submit"
+ className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
+ onClick={() => setOpen(false)}
+ >
+ Submit
+ </button>
+ </div>
+ </form>
+ </>
+ )}
</div>
</div>
</Modal>
+ <Navigasi />
<div className="min-h-screen flex flex-col lg:gap-0 gap-5 lg:flex-row lg:py-10 lg:px-10 justify-start w-screen">
<div className="w-screen lg:w-[67%]">
<div className="h-auto aspect-video z-20">
@@ -59,6 +163,9 @@ export default function Info({ info }) {
seek={info.seek}
titles={title}
id={info.id}
+ progress={parseInt(playingEpisode)}
+ session={session}
+ aniId={parseInt(data.id)}
/>
</div>
<div>
diff --git a/pages/api/getUser.js b/pages/api/getUser.js
new file mode 100644
index 0000000..7df10a6
--- /dev/null
+++ b/pages/api/getUser.js
@@ -0,0 +1,20 @@
+import clientPromise from "../../lib/mongodb";
+
+export async function getUser(userName) {
+ const client = await clientPromise;
+ const db = client.db("authbase");
+
+ const collection = db.collection("users");
+ const user = await collection.findOne({ name: userName });
+
+ user._id = String(user._id);
+
+ return user;
+}
+
+export default async function handler(req, res) {
+ const { userName } = req.query;
+ const user = await getUser(userName);
+
+ res.status(200).json(user);
+}
diff --git a/pages/api/update-user.js b/pages/api/update-user.js
new file mode 100644
index 0000000..9f652ac
--- /dev/null
+++ b/pages/api/update-user.js
@@ -0,0 +1,21 @@
+// pages/api/update-user.js
+import clientPromise from "../../lib/mongodb";
+
+export default async function handler(req, res) {
+ const client = await clientPromise;
+ const db = client.db("authbase");
+ const collection = db.collection("users");
+
+ const { name, newData } = req.body; // id is the user ID and newData is the new data you want to set
+
+ try {
+ const result = await collection.updateOne(
+ { name: name },
+ { $set: newData }
+ );
+
+ res.status(200).json(result);
+ } catch (error) {
+ res.status(500).json({ error: "Unable to update user data" });
+ }
+}
diff --git a/pages/dmca.js b/pages/dmca.js
index 7244bf7..c94781b 100644
--- a/pages/dmca.js
+++ b/pages/dmca.js
@@ -22,7 +22,7 @@ export default function DMCA() {
<link rel="icon" href="/c.svg" />
</Head>
<Layout>
- <div className="min-h-screen flex w-screen justify-center items-center">
+ <div className="min-h-screen z-20 flex w-screen justify-center items-center">
<div className="w-[75%] text-2xl gap-7 flex flex-col my-[10rem]">
<div className="flex">
<h1 className="text-4xl font-bold font-karla rounded-md bg-[#212121] p-3">
diff --git a/pages/index.js b/pages/index.js
index 7c26f0b..d75cb0f 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,4 +1,3 @@
-import { MdChevronLeft, MdChevronRight } from "react-icons/md";
import { aniListData } from "../lib/AniList";
import React, { useState, useEffect } from "react";
import ReactHtmlParser from "kt-react-html-parser";
@@ -9,12 +8,90 @@ import Image from "next/image";
import Content from "../components/hero/content";
import { useRouter } from "next/router";
-export default function Home({ detail, populars, topDesc }) {
+import { useSession, signIn } from "next-auth/react";
+
+export function Navigasi() {
+ const { data: session, status } = useSession();
+
+ const router = useRouter();
+
+ const handleFormSubmission = (inputValue) => {
+ router.push(`/search?hasil=${encodeURIComponent(inputValue)}`);
+ };
+
+ const handleKeyDown = async (event) => {
+ if (event.key === "Enter") {
+ event.preventDefault();
+ const inputValue = event.target.value;
+ handleFormSubmission(inputValue);
+ }
+ };
+ return (
+ <>
+ {/* NAVBAR PC */}
+ <div className="flex items-center justify-center">
+ <div className="flex w-full items-center justify-between px-5 md:mx-[94px]">
+ <div className="flex items-center md:gap-16 md:pt-7">
+ <Link
+ href="/"
+ className=" font-outfit text-[40px] font-bold text-[#FF7F57]"
+ >
+ moopa
+ </Link>
+ <ul className="hidden items-center gap-10 pt-2 font-outfit text-[14px] md:flex">
+ <Link href="/search">
+ <li>AniList Index</li>
+ </Link>
+ <Link href="/test">
+ <li>Manga</li>
+ </Link>
+ <li>Anime</li>
+ {status === "loading" && <li>Loading...</li>}
+ {!session && (
+ <li>
+ <button
+ onClick={() => signIn("AniListProvider")}
+ className="ring-1 ring-action font-karla font-bold px-2 py-1 rounded-md"
+ >
+ Sign in
+ </button>
+ </li>
+ )}
+ {session && (
+ <li className="text-center">
+ {/* <div className="p-2"><img src={session?.user.image.large} alt="imagine" /></div> */}
+ My List
+ </li>
+ )}
+ </ul>
+ </div>
+ <div className="relative flex scale-75 items-center mb-7 md:mb-0">
+ <div className="search-box ">
+ <input
+ className="search-text"
+ type="text"
+ placeholder="Search Anime"
+ onKeyDown={handleKeyDown}
+ />
+ <a href="#" className="search-btn">
+ <i className="fas fa-search"></i>
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </>
+ );
+}
+
+export default function Home({ detail, populars }) {
+ const { data: session, status } = useSession();
const [isVisible, setIsVisible] = useState(false);
const [recently, setRecently] = useState(null);
- const popular = populars.data;
+ const popular = populars?.data;
const data = detail.data[0];
- const router = useRouter();
+
+ const greeting = getGreeting();
const handleShowClick = () => {
setIsVisible(true);
@@ -34,32 +111,6 @@ export default function Home({ detail, populars, topDesc }) {
fetchData();
}, []);
- function handleRemove() {
- localStorage.removeItem("recentWatch");
- setRecently(null);
- }
-
- const slideLeft = () => {
- var slider = document.getElementById("recentslider");
- slider.scrollLeft = slider.scrollLeft - 500;
- };
- const slideRight = () => {
- var slider = document.getElementById("recentslider");
- slider.scrollLeft = slider.scrollLeft + 500;
- };
-
- const handleFormSubmission = (inputValue) => {
- router.push(`/search?hasil=${encodeURIComponent(inputValue)}`);
- };
-
- const handleKeyDown = async (event) => {
- if (event.key === "Enter") {
- event.preventDefault();
- const inputValue = event.target.value;
- handleFormSubmission(inputValue);
- }
- };
-
return (
<>
<Head>
@@ -80,6 +131,8 @@ export default function Home({ detail, populars, topDesc }) {
/>
<link rel="icon" href="/c.svg" />
</Head>
+
+ {/* NAVBAR */}
<div className="z-50">
{!isVisible && (
<button
@@ -103,7 +156,38 @@ export default function Home({ detail, populars, topDesc }) {
)}
{/* Mobile Menu */}
- <div>
+ <div className="md:hidden">
+ {isVisible && (
+ <button
+ type="button"
+ onClick={() => signIn("AniListProvider")}
+ className="fixed bottom-[100px] w-[60px] h-[60px] flex items-center justify-center right-[20px] rounded-full z-50 bg-[#101925]"
+ >
+ {!session && (
+ <div>
+ <svg
+ xmlns="http://www.w3.org/2000/svg"
+ width="32"
+ height="26"
+ fill="none"
+ viewBox="0 0 33 26"
+ >
+ <path
+ fill="#fff"
+ d="M15.167 24.638v-1.732h8.942c.209 0 .4-.087.573-.26.174-.174.26-.365.26-.573V3.28c0-.209-.086-.4-.26-.573-.173-.174-.364-.26-.573-.26h-8.942V.714h8.942c.707 0 1.311.25 1.813.753.502.502.753 1.106.753 1.813v18.792c0 .706-.25 1.31-.753 1.812a2.471 2.471 0 01-1.813.753h-8.942zm-1.532-6.536l-1.303-1.26 3.32-3.322H3.86v-1.732h11.766l-3.321-3.321 1.321-1.233 5.448 5.448-5.438 5.42z"
+ ></path>
+ </svg>
+ </div>
+ )}
+ {session && (
+ <img
+ src={session?.user.image.large}
+ alt="user avatar"
+ className="object-cover"
+ />
+ )}
+ </button>
+ )}
{isVisible && (
<div className="fixed bottom-[25px] right-[15px] z-50 flex h-[66px] w-[255px] items-center justify-center gap-8 rounded-[10px] text-[11px] bg-[#101925] shadow-menu md:hidden">
<div className="flex gap-7">
@@ -227,47 +311,17 @@ export default function Home({ detail, populars, topDesc }) {
)}
</div>
</div>
- <div className="h-auto w-screen bg-[#141519] text-white">
- <div className="flex items-center justify-center">
- <div className="flex w-full items-center justify-between px-5 md:mx-[94px]">
- <div className="flex items-center md:gap-16 md:pt-7">
- <h1 className=" font-outfit text-[40px] font-bold text-[#FF7F57]">
- moopa
- </h1>
- <ul className="hidden gap-10 pt-2 font-outfit text-[14px] md:flex">
- <Link href="/search">
- <li>AniList Index</li>
- </Link>
- <Link href="/test">
- <li>Manga</li>
- </Link>
- <li>Anime</li>
- </ul>
- </div>
- <div className="relative flex scale-75 items-center">
- <div className="search-box ">
- <input
- className="search-text"
- type="text"
- placeholder="Search Anime"
- onKeyDown={handleKeyDown}
- />
- <a href="#" className="search-btn">
- <i className="fas fa-search"></i>
- </a>
- </div>
- </div>
- </div>
- </div>
+ <div className="h-auto w-screen bg-[#141519] text-[#dbdcdd] ">
+ <Navigasi />
{/* PC / TABLET */}
- <div className="mt-10 hidden justify-center lg:flex">
- <div className="relative grid grid-rows-2 items-center md:flex md:h-[760px] md:w-[80%] md:justify-between">
+ <div className=" hidden justify-center lg:flex my-16">
+ <div className="relative grid grid-rows-2 items-center md:flex md:h-[467px] md:w-[80%] md:justify-between">
<div className="row-start-2 flex h-full flex-col gap-7 md:w-[55%] md:justify-center">
- <h1 className="w-[85%] font-outfit font-extrabold md:text-[45px] line-clamp-2">
+ <h1 className="w-[85%] font-outfit font-extrabold md:text-[34px] line-clamp-2">
{data.title.english || data.title.romaji || data.title.native}
</h1>
- <div className="font-roboto font-light md:text-[24px] line-clamp-5">
+ <div className="font-roboto font-light md:text-[18px] line-clamp-5">
{ReactHtmlParser(data.description)}
</div>
@@ -277,84 +331,48 @@ export default function Home({ detail, populars, topDesc }) {
legacyBehavior
className="flex"
>
- <a className="rounded-sm p-3 font-karla font-light ring-1 ring-[#FF7F57]">
+ <a className="rounded-sm p-3 text-md font-karla font-light ring-1 ring-[#FF7F57]">
START WATCHING
</a>
</Link>
</div>
</div>
<div className="z-10 row-start-1 flex justify-center ">
- <div className="relative md:h-[662px] md:w-[460px] md:scale-100">
- <div className="absolute bg-gradient-to-t from-[#141519] to-transparent md:h-[662px] md:w-[460px]" />
+ <div className="relative md:h-[467px] md:w-[322px] md:scale-100">
+ <div className="absolute bg-gradient-to-t from-[#141519] to-transparent md:h-[467px] md:w-[322px]" />
<Image
draggable={false}
- src={data.coverImage.extraLarge}
+ src={data.coverImage?.extraLarge || data.image}
alt={data.title.english || data.title.romaji}
width={460}
height={662}
priority
- className="rounded-tl-xl rounded-tr-xl object-cover bg-blend-overlay md:h-[662px] md:w-[460px] "
+ className="rounded-tl-xl rounded-tr-xl object-cover bg-blend-overlay md:h-[467,6px] md:w-[322px]"
/>
</div>
</div>
</div>
</div>
+ {session && (
+ <div className="w-screen flex md:justify-center mx-3 md:mx-0 mt-10 md:mt-0">
+ <div className="md:w-[86%] md:text-3xl text-2xl font-bold font-karla">
+ {greeting}, {session?.user.name}
+ </div>
+ </div>
+ )}
+
{/* Mobile */}
- <div className="mt-16 flex flex-col items-center">
+ <div className="md:mt-16 mt-12 flex flex-col items-center">
<div className="w-screen flex-none lg:w-[87%]">
{recently && (
- <div>
- <div className="flex items-center gap-5 lg:gap-10">
- <h1 className="px-5 font-outfit text-[20px] font-extrabold lg:text-[27px]">
- Recently Watched
- </h1>
- <div
- className="cursor-pointer font-outfit font-light text-[#8f8f8f]"
- onClick={() => handleRemove()}
- >
- Clear all
- </div>
- </div>
- <div className="relative z-10 flex items-center py-10 lg:gap-2">
- <MdChevronLeft
- onClick={slideLeft}
- size={40}
- className="mb-5 cursor-pointer opacity-50 hover:opacity-100"
- />
- <div
- id="recentslider"
- className="scroll flex h-full w-full items-center overflow-x-scroll scroll-smooth whitespace-nowrap overflow-y-hidden scrollbar-hide lg:gap-5"
- >
- {recently.map((anime, index) => {
- const url = encodeURIComponent(anime.title);
-
- return (
- <Link
- href={`/anime/${anime.id}`}
- key={index}
- className="shrink-0 "
- >
- <Image
- src={anime.image}
- alt={anime.title || "cover image"}
- width={209}
- height={300}
- className="z-20 h-[230px] w-[168px] object-cover p-2 duration-300 ease-in-out hover:scale-105 lg:h-[290px] lg:w-[209px]"
- />
- </Link>
- );
- })}
- </div>
- <MdChevronRight
- onClick={slideRight}
- size={40}
- className="mb-5 cursor-pointer opacity-50 hover:opacity-100"
- />
- </div>
- </div>
+ <Content
+ ids="recentlyWatched"
+ section="Recently Watched"
+ data={recently}
+ />
)}
{detail && (
@@ -390,16 +408,27 @@ export async function getServerSideProps({ req, res }) {
page: 1,
});
const genreDetail = await aniListData({ sort: "TYPE", page: 1 });
- const newTrend = await trendingDetail.props;
- const trends = newTrend.data[0];
- const topDesc = trends.description.slice(0, 350) + "...";
return {
props: {
- topDesc: topDesc,
genre: genreDetail.props,
detail: trendingDetail.props,
populars: popularDetail.props,
},
};
}
+
+function getGreeting() {
+ const time = new Date().getHours();
+ let greeting = "";
+
+ if (time >= 5 && time < 12) {
+ greeting = "Good morning";
+ } else if (time >= 12 && time < 18) {
+ greeting = "Good afternoon";
+ } else {
+ greeting = "Good evening";
+ }
+
+ return greeting;
+}
diff --git a/pages/search.js b/pages/search.js
index 87f9cdc..4bb32af 100644
--- a/pages/search.js
+++ b/pages/search.js
@@ -107,8 +107,6 @@ export default function Card() {
advance();
}, [search, type, seasonYear, season, genres, perPage, sort]);
- console.log(data);
-
// useEffect(() => {
// async function fetchData() {
// setLoading(true);
@@ -421,10 +419,3 @@ export default function Card() {
</>
);
}
-
-{
- /* <div className=" w-[228px]">
- <div className="bg-[#3B3C41] h-[313px] rounded-[10px]" />
- <h1 className="font-outfit font-extrabold text-[24px]">Anime Title</h1>
- </div> */
-}
diff --git a/pages/test.js b/pages/test.js
index 57db350..0db3a17 100644
--- a/pages/test.js
+++ b/pages/test.js
@@ -13,7 +13,7 @@ import { useAniList } from "../lib/useAnilist";
export default function AniTest() {
const { data: session, status } = useSession();
- const { media, aniAdvanceSearch } = useAniList(session);
+ const { media, aniAdvanceSearch, markComplete } = useAniList(session);
const [advanceSearch, setAdvanceSearch] = useState();
const [search, setSearch] = useState();
@@ -53,6 +53,11 @@ export default function AniTest() {
// const [open, setOpen] = useState(false);
+ async function markAsComplete(id) {
+ const response = await markComplete(id);
+ console.log(response);
+ }
+
async function advance() {
const data = await aniAdvanceSearch(
search,
@@ -80,7 +85,7 @@ export default function AniTest() {
// search: "naruto",
// });
- console.log(advanceSearch);
+ // console.log(advanceSearch);
return (
// <div className="h-[720px] w-[1280px]">
@@ -124,9 +129,6 @@ export default function AniTest() {
/>
</div>
)}
- {advanceSearch?.media.map((item) => {
- return <div key={item.id}>{item.title.userPreferred}</div>;
- })}
{media?.length > 0 && (
<div className="flex-center flex-col gap-5">
{media.map((item, index) => {
@@ -156,14 +158,7 @@ export default function AniTest() {
</h3>
{item.name === "Watching" && (
<button
- onClick={() =>
- handleUpdateMediaEntry(
- items.media.id,
- "COMPLETED",
- items.media.episodes,
- 8
- )
- }
+ onClick={() => markAsComplete(items.media.id)}
>
Mark as Complete
</button>
diff --git a/pages/testing.js b/pages/testing.js
new file mode 100644
index 0000000..ffa8080
--- /dev/null
+++ b/pages/testing.js
@@ -0,0 +1,34 @@
+import { getUser } from "./api/getUser";
+
+export default function Testing({ user }) {
+ async function handleUpdate() {
+ const res = await fetch("/api/update-user", {
+ method: "POST",
+ body: JSON.stringify({
+ name: "Factiven",
+ newData: {
+ settings: {
+ tracking: false,
+ },
+ },
+ }),
+ headers: {
+ "Content-Type": "application/json",
+ },
+ });
+ console.log(res.status);
+ }
+
+ console.log(user.settings);
+ return <button onClick={() => handleUpdate()}>Click for update</button>;
+}
+
+export async function getServerSideProps(context) {
+ const user = await getUser("Factiven");
+ console.log(user);
+ return {
+ props: {
+ user: user,
+ },
+ };
+}
diff --git a/styles/globals.css b/styles/globals.css
index e8ab602..f4be0b0 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -1,4 +1,4 @@
-@import url("https://fonts.googleapis.com/css2?family=Karla:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,200;1,300;1,400;1,500;1,600;1,700;1,800&family=Outfit:wght@100;200;300;400;500;600;700;800;900&family=Ramabhadra&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap");
+@import url("https://fonts.googleapis.com/css2?family=Karla:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,200;1,300;1,400;1,500;1,600;1,700;1,800&family=Outfit:wght@100;200;300;400;500;600;700;800;900&family=Ramabhadra&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap");
@tailwind base;
@tailwind components;
@tailwind utilities;
@@ -9,6 +9,10 @@
}
}
+* {
+ -webkit-tap-highlight-color: transparent;
+}
+
body {
@apply bg-[#131313] scrollbar-hide;
}
diff --git a/tailwind.config.js b/tailwind.config.js
index 9d7cb3c..066d8b7 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -55,6 +55,7 @@ module.exports = {
outfit: ["Outfit", "sans-serif"],
karla: ["Karla", "sans-serif"],
roboto: ["Roboto", "sans-serif"],
+ inter: ["Inter", "sans-serif"],
},
},
variants: {