Esteves Enzo commited on
Commit
848e268
·
1 Parent(s): 53353f2

infinite scroll + fix nsfw check + input doesnt allow to edit

Browse files
app/api/collections/route.ts CHANGED
@@ -3,7 +3,8 @@ import { PrismaClient } from '@prisma/client'
3
  const prisma = new PrismaClient()
4
 
5
  export async function POST(request: Request) {
6
- const { ids } = await request.json()
 
7
  const images = await prisma.image.findMany({
8
  orderBy: {
9
  id: 'desc'
@@ -12,8 +13,23 @@ export async function POST(request: Request) {
12
  id: {
13
  in: ids,
14
  }
15
- }
 
 
16
  })
17
 
18
- return Response.json({ images, status: 200, ok: true })
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  }
 
3
  const prisma = new PrismaClient()
4
 
5
  export async function POST(request: Request) {
6
+ const { ids, page } = await request.json()
7
+
8
  const images = await prisma.image.findMany({
9
  orderBy: {
10
  id: 'desc'
 
13
  id: {
14
  in: ids,
15
  }
16
+ },
17
+ take: 15,
18
+ skip: page * 15
19
  })
20
 
21
+ const total = await prisma.image.count()
22
+
23
+ return Response.json(
24
+ {
25
+ images,
26
+ pagination: {
27
+ total,
28
+ page: page + 1,
29
+ total_pages: Math.ceil(total / 15)
30
+ },
31
+ status: 200,
32
+ ok: true
33
+ }
34
+ )
35
  }
app/api/route.ts CHANGED
@@ -28,15 +28,31 @@ export async function POST(
28
  const headers = new Headers();
29
  headers.set("Content-Type", "image/*");
30
 
31
- const response_isnsfw = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/models/DamarJati/NSFW-Filterization-DecentScan`, {
32
- method: 'POST',
33
- headers: {
34
- ...global_headers,
35
- ...headers,
36
- },
37
- body: blob,
38
- })
39
- const isNSFW = await response_isnsfw.clone().json().catch(() => ({}));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
  if (isNSFW?.length) {
42
  const scoreNotSafe = isNSFW?.find((n: { label: string }) => n.label === "no_safe");
 
28
  const headers = new Headers();
29
  headers.set("Content-Type", "image/*");
30
 
31
+ const checkIfIsNSFW = (blob: Blob) => {
32
+ return new Promise(async (resolve, reject) => {
33
+ const response_nsfw = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/models/DamarJati/NSFW-Filterization-DecentScan`, {
34
+ method: 'POST',
35
+ headers: {
36
+ ...global_headers,
37
+ ...headers,
38
+ },
39
+ body: blob,
40
+ })
41
+ const isNSFW = await response_nsfw.clone().json().catch(() => ({}));
42
+
43
+ if (isNSFW?.error && isNSFW?.estimated_time) {
44
+ console.log("retrying...")
45
+ setTimeout(() => {
46
+ checkIfIsNSFW(blob)
47
+ }, isNSFW?.estimated_time * 1000);
48
+ } else resolve(isNSFW)
49
+ })
50
+ }
51
+
52
+ const isNSFW: any = await checkIfIsNSFW(blob)
53
+ console.log(isNSFW)
54
+
55
+ if (isNSFW?.error) return Response.json({ status: 500, ok: false, message: isNSFW?.error });
56
 
57
  if (isNSFW?.length) {
58
  const scoreNotSafe = isNSFW?.find((n: { label: string }) => n.label === "no_safe");
components/header.tsx CHANGED
@@ -31,11 +31,11 @@ export const Header = () => {
31
  shared.
32
  </p>
33
  </div>
34
- <Image
35
  src={HeaderImage}
36
  alt="Demo generated images"
37
  className="absolute h-full top-0 object-contain hidden lg:block right-0 xl:right-44 object-left"
38
- />
39
  <div
40
  className="absolute w-full lg:w-1/3 right-0 xl:right-44 -bottom-32 lg:-bottom-32 bg-gradient-to-br from-blue-500 to-pink-500 blur-xl lg:blur-[130px] h-full z-[-1]"
41
  style={{ willChange: "transform" }}
 
31
  shared.
32
  </p>
33
  </div>
34
+ {/* <Image
35
  src={HeaderImage}
36
  alt="Demo generated images"
37
  className="absolute h-full top-0 object-contain hidden lg:block right-0 xl:right-44 object-left"
38
+ /> */}
39
  <div
40
  className="absolute w-full lg:w-1/3 right-0 xl:right-44 -bottom-32 lg:-bottom-32 bg-gradient-to-br from-blue-500 to-pink-500 blur-xl lg:blur-[130px] h-full z-[-1]"
41
  style={{ willChange: "transform" }}
components/input-generation.tsx CHANGED
@@ -1,5 +1,5 @@
1
  import classNames from "classnames";
2
- import { useRef } from "react";
3
  import { HiLightBulb, HiSearch } from "react-icons/hi";
4
 
5
  interface Props {
@@ -15,22 +15,24 @@ export const InputGeneration: React.FC<Props> = ({
15
  onChange,
16
  onSubmit,
17
  }) => {
 
18
  const input = useRef<HTMLInputElement>(null);
19
 
20
  return (
21
  <div
22
- className="bg-white rounded-full p-3 w-full max-w-xl flex items-center justify-between group transition-all duration-200 focus-within:ring-[6px] focus-within:ring-primary border-[2px] border-white focus-within:ring-opacity-40 focus-within:border-primary gap-3"
23
  onClick={() => input.current?.focus()}
24
  >
25
  <div className="flex items-center gap-3 pl-3 w-full">
26
  <HiLightBulb className="text-2xl text-gray-400 group-focus-within:text-primary transition-all duration-200" />
27
  <input
28
  ref={input}
29
- value={prompt}
30
  type="text"
31
  className="h-full text-lg placeholder:text-gray-400 text-gray-900 font-medium w-full outline-none truncate"
32
  placeholder="A thug cat riding his small bike"
33
- onChange={(e) => onChange(e.target.value)}
 
34
  onKeyDown={(e) => {
35
  if (e.key === "Enter" && prompt && !loading) {
36
  onSubmit();
 
1
  import classNames from "classnames";
2
+ import { useRef, useState } from "react";
3
  import { HiLightBulb, HiSearch } from "react-icons/hi";
4
 
5
  interface Props {
 
15
  onChange,
16
  onSubmit,
17
  }) => {
18
+ const [value, setValue] = useState<string>(prompt);
19
  const input = useRef<HTMLInputElement>(null);
20
 
21
  return (
22
  <div
23
+ className="bg-white rounded-full p-3 w-full max-w-3xl flex items-center justify-between group transition-all duration-200 focus-within:ring-[6px] focus-within:ring-primary border-[2px] border-white focus-within:ring-opacity-40 focus-within:border-primary gap-3"
24
  onClick={() => input.current?.focus()}
25
  >
26
  <div className="flex items-center gap-3 pl-3 w-full">
27
  <HiLightBulb className="text-2xl text-gray-400 group-focus-within:text-primary transition-all duration-200" />
28
  <input
29
  ref={input}
30
+ value={value}
31
  type="text"
32
  className="h-full text-lg placeholder:text-gray-400 text-gray-900 font-medium w-full outline-none truncate"
33
  placeholder="A thug cat riding his small bike"
34
+ onChange={(e) => setValue(e.target.value)}
35
+ onBlur={() => onChange(value)}
36
  onKeyDown={(e) => {
37
  if (e.key === "Enter" && prompt && !loading) {
38
  onSubmit();
components/main/collections/collection.tsx CHANGED
@@ -1,13 +1,13 @@
1
  import { useMemo } from "react";
2
  import { motion } from "framer-motion";
3
 
4
- import { Collection as CollectionType } from "@/utils/type";
5
  import { useInputGeneration } from "@/components/main/hooks/useInputGeneration";
6
  import { arrayBufferToBase64 } from "@/utils";
7
 
8
  interface Props {
9
  index: number;
10
- collection: CollectionType;
11
  className?: string;
12
  onOpen: (id: string) => void;
13
  }
 
1
  import { useMemo } from "react";
2
  import { motion } from "framer-motion";
3
 
4
+ import { Collection as CollectionType, Image } from "@/utils/type";
5
  import { useInputGeneration } from "@/components/main/hooks/useInputGeneration";
6
  import { arrayBufferToBase64 } from "@/utils";
7
 
8
  interface Props {
9
  index: number;
10
+ collection: Image;
11
  className?: string;
12
  onOpen: (id: string) => void;
13
  }
components/main/collections/index.tsx CHANGED
@@ -1,9 +1,9 @@
1
- import { useState } from "react";
2
  import classNames from "classnames";
3
  import { createBreakpoint } from "react-use";
4
  import { AnimatePresence } from "framer-motion";
 
5
 
6
- import { Collection as CollectionType } from "@/utils/type";
7
  import { useCollections } from "@/components/main/hooks/useCollections";
8
  import { Modal } from "@/components/modal/modal";
9
  import { Collection } from "./collection";
@@ -14,18 +14,28 @@ const useBreakpoint = createBreakpoint({ XL: 1280, L: 1024, S: 768, XS: 640 });
14
 
15
  export const Collections: React.FC<{ category: string }> = ({ category }) => {
16
  const { open, setOpen } = useCollection();
17
- const { collections, loading } = useCollections(category);
 
18
  const breakpoint = useBreakpoint();
19
 
20
  if (loading) return null;
21
 
22
  return (
23
  <>
24
- <div className="mx-auto grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-5 mt-8 lg:mt-14">
25
- {collections?.map((collection: CollectionType, i: number) =>
 
 
 
 
 
 
 
 
 
26
  collection?.loading ? (
27
  <CollectionLoading
28
- key={i}
29
  prompt={collection.prompt}
30
  error={collection.error}
31
  className={classNames("", {
@@ -62,7 +72,7 @@ export const Collections: React.FC<{ category: string }> = ({ category }) => {
62
  />
63
  )
64
  )}
65
- </div>
66
  <AnimatePresence initial={false} mode="wait" onExitComplete={() => null}>
67
  {open !== null && <Modal id={open} onClose={() => setOpen(null)} />}
68
  </AnimatePresence>
 
 
1
  import classNames from "classnames";
2
  import { createBreakpoint } from "react-use";
3
  import { AnimatePresence } from "framer-motion";
4
+ import InfiniteScroll from "react-infinite-scroller";
5
 
6
+ import { Collection as CollectionType, Image } from "@/utils/type";
7
  import { useCollections } from "@/components/main/hooks/useCollections";
8
  import { Modal } from "@/components/modal/modal";
9
  import { Collection } from "./collection";
 
14
 
15
  export const Collections: React.FC<{ category: string }> = ({ category }) => {
16
  const { open, setOpen } = useCollection();
17
+ const { images, loading, infiniteRefetch, pagination, infiniteLoading } =
18
+ useCollections(category);
19
  const breakpoint = useBreakpoint();
20
 
21
  if (loading) return null;
22
 
23
  return (
24
  <>
25
+ <InfiniteScroll
26
+ pageStart={0}
27
+ loadMore={() => {
28
+ if (infiniteLoading) return;
29
+ infiniteRefetch();
30
+ }}
31
+ hasMore={pagination?.total_pages > pagination?.page}
32
+ // loader={<p className="bg-red-500 text-white text-2xl">loading...</p>}
33
+ className="mx-auto grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-5 mt-8 lg:mt-14"
34
+ >
35
+ {images?.map((collection: Image, i: number) =>
36
  collection?.loading ? (
37
  <CollectionLoading
38
+ key={"loading" + i}
39
  prompt={collection.prompt}
40
  error={collection.error}
41
  className={classNames("", {
 
72
  />
73
  )
74
  )}
75
+ </InfiniteScroll>
76
  <AnimatePresence initial={false} mode="wait" onExitComplete={() => null}>
77
  {open !== null && <Modal id={open} onClose={() => setOpen(null)} />}
78
  </AnimatePresence>
components/main/hooks/useCollections.ts CHANGED
@@ -1,20 +1,26 @@
1
- import { useQuery } from "@tanstack/react-query";
 
2
  import { useLocalStorage, useUpdateEffect } from "react-use";
 
3
 
4
  export const useCollections = (category: string) => {
 
5
  const [myGenerationsId] = useLocalStorage<any>('my-own-generations', []);
 
 
 
6
  const {
7
- data: collections,
8
- isFetching: loading,
9
  refetch,
10
  } = useQuery(
11
  ["collections"],
12
  async () => {
13
- // if category is my-own, send to reauest myGenerationsId array
14
  const response = await fetch("/api/collections", {
15
  method: "POST",
16
  body: JSON.stringify({
17
  ids: category === 'my-own' ? myGenerationsId : undefined,
 
18
  }),
19
  })
20
  const data = await response.json()
@@ -22,7 +28,10 @@ export const useCollections = (category: string) => {
22
  if (!response.ok) {
23
  throw new Error(data.message)
24
  }
25
- return data.images;
 
 
 
26
  },
27
  {
28
  refetchOnMount: false,
@@ -31,12 +40,35 @@ export const useCollections = (category: string) => {
31
  }
32
  );
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  useUpdateEffect(() => {
35
  refetch()
36
  }, [category]);
37
 
38
  return {
39
- collections,
40
- loading,
 
 
 
41
  }
42
  };
 
1
+ import { useState } from "react";
2
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
3
  import { useLocalStorage, useUpdateEffect } from "react-use";
4
+ import _ from "lodash";
5
 
6
  export const useCollections = (category: string) => {
7
+ const [loading, setLoading] = useState(false);
8
  const [myGenerationsId] = useLocalStorage<any>('my-own-generations', []);
9
+
10
+ const client = useQueryClient();
11
+
12
  const {
13
+ data,
14
+ isFetching,
15
  refetch,
16
  } = useQuery(
17
  ["collections"],
18
  async () => {
 
19
  const response = await fetch("/api/collections", {
20
  method: "POST",
21
  body: JSON.stringify({
22
  ids: category === 'my-own' ? myGenerationsId : undefined,
23
+ page: 0,
24
  }),
25
  })
26
  const data = await response.json()
 
28
  if (!response.ok) {
29
  throw new Error(data.message)
30
  }
31
+ return {
32
+ images: data?.images,
33
+ pagination: data?.pagination,
34
+ };
35
  },
36
  {
37
  refetchOnMount: false,
 
40
  }
41
  );
42
 
43
+ const infiniteRefetch = async () => {
44
+ setLoading(true);
45
+ const response = await fetch("/api/collections", {
46
+ method: "POST",
47
+ body: JSON.stringify({
48
+ ids: category === 'my-own' ? myGenerationsId : undefined,
49
+ page: data?.pagination?.page,
50
+ }),
51
+ })
52
+ const d = await response.json()
53
+ if (d.ok) {
54
+ const images = _.concat(data?.images, d?.images);
55
+ client.setQueryData(["collections"], {
56
+ images,
57
+ pagination: d?.pagination,
58
+ });
59
+ }
60
+ setLoading(false);
61
+ };
62
+
63
  useUpdateEffect(() => {
64
  refetch()
65
  }, [category]);
66
 
67
  return {
68
+ images: data?.images,
69
+ loading: isFetching,
70
+ infiniteLoading: loading,
71
+ infiniteRefetch,
72
+ pagination: data?.pagination,
73
  }
74
  };
components/modal/modal.tsx CHANGED
@@ -1,5 +1,6 @@
1
  import { useMemo } from "react";
2
  import { motion } from "framer-motion";
 
3
 
4
  import { arrayBufferToBase64 } from "@/utils";
5
  import { useCollection } from "./useCollection";
@@ -11,7 +12,6 @@ interface Props {
11
 
12
  const dropIn = {
13
  hidden: {
14
- y: "-100vh",
15
  opacity: 0,
16
  },
17
  visible: {
@@ -25,7 +25,6 @@ const dropIn = {
25
  },
26
  },
27
  exit: {
28
- y: "100vh",
29
  opacity: 0,
30
  },
31
  };
@@ -58,17 +57,18 @@ export const Modal: React.FC<Props> = ({ id, onClose }) => {
58
  >
59
  <motion.div
60
  onClick={(e) => e.stopPropagation()}
61
- className="max-w-2xl h-2/3 w-full z-[1] rounded-3xl overflow-hidden flex items-center justify-center flex-col gap-4 bg-white/30 backdrop-blur-sm px-2 pb-2 pt-6"
62
  variants={dropIn}
63
  initial="hidden"
64
  animate="visible"
65
  exit="exit"
66
  >
67
- <div
68
- className="bg-contain bg-center w-full h-full rounded-2xl bg-no-repeat"
69
- style={{
70
- backgroundImage: `url(${bufferToBase64})`,
71
- }}
 
72
  />
73
  <div
74
  className="bg-cover bg-center w-full h-full rounded-2xl bg-no-repeat z-[-1] absolute top-0 left-0 opacity-90 blur-xl"
 
1
  import { useMemo } from "react";
2
  import { motion } from "framer-motion";
3
+ import Image from "next/image";
4
 
5
  import { arrayBufferToBase64 } from "@/utils";
6
  import { useCollection } from "./useCollection";
 
12
 
13
  const dropIn = {
14
  hidden: {
 
15
  opacity: 0,
16
  },
17
  visible: {
 
25
  },
26
  },
27
  exit: {
 
28
  opacity: 0,
29
  },
30
  };
 
57
  >
58
  <motion.div
59
  onClick={(e) => e.stopPropagation()}
60
+ className="max-w-2xl h-auto w-full z-[1] rounded-3xl overflow-hidden flex items-center justify-center flex-col gap-4 bg-white/30 backdrop-blur-sm px-2 pb-2 pt-2"
61
  variants={dropIn}
62
  initial="hidden"
63
  animate="visible"
64
  exit="exit"
65
  >
66
+ <Image
67
+ src={bufferToBase64 as string}
68
+ alt="Generated image"
69
+ className="object-center object-contain w-full h-full rounded-2xl"
70
+ width={1024}
71
+ height={1024}
72
  />
73
  <div
74
  className="bg-cover bg-center w-full h-full rounded-2xl bg-no-repeat z-[-1] absolute top-0 left-0 opacity-90 blur-xl"
components/modal/useCollection.ts CHANGED
@@ -17,10 +17,10 @@ export const useCollection = (id?: string) => {
17
  const client = useQueryClient()
18
 
19
  const collection = useMemo(() => {
20
- const collections = client.getQueryData<Collection[]>(["collections"])
21
- if (!collections) return null
22
 
23
- return collections.find((collection) => collection.id === id)
24
  }, [id])
25
 
26
  return {
 
17
  const client = useQueryClient()
18
 
19
  const collection = useMemo(() => {
20
+ const collections = client.getQueryData<Collection>(["collections"])
21
+ if (!collections?.images) return null
22
 
23
+ return collections?.images?.find((collection) => collection.id === id)
24
  }, [id])
25
 
26
  return {
package-lock.json CHANGED
@@ -10,20 +10,23 @@
10
  "dependencies": {
11
  "@prisma/client": "^5.5.2",
12
  "@tanstack/react-query": "^4.32.6",
13
- "@xenova/transformers": "^2.7.0",
14
  "classnames": "^2.3.2",
15
  "filereader": "^0.10.3",
16
  "framer-motion": "^10.16.4",
 
17
  "next": "13.5.6",
18
  "react": "^18",
19
  "react-dom": "^18",
20
  "react-icons": "^4.11.0",
 
21
  "react-use": "^17.4.0"
22
  },
23
  "devDependencies": {
 
24
  "@types/node": "^20.8.9",
25
  "@types/react": "^18",
26
  "@types/react-dom": "^18",
 
27
  "autoprefixer": "^10",
28
  "eslint": "^8",
29
  "eslint-config-next": "13.5.6",
@@ -456,60 +459,6 @@
456
  "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a.tgz",
457
  "integrity": "sha512-O+qHFnZvAyOFk1tUco2/VdiqS0ym42a3+6CYLScllmnpbyiTplgyLt2rK/B9BTjYkSHjrgMhkG47S0oqzdIckA=="
458
  },
459
- "node_modules/@protobufjs/aspromise": {
460
- "version": "1.1.2",
461
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
462
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
463
- },
464
- "node_modules/@protobufjs/base64": {
465
- "version": "1.1.2",
466
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
467
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
468
- },
469
- "node_modules/@protobufjs/codegen": {
470
- "version": "2.0.4",
471
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
472
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
473
- },
474
- "node_modules/@protobufjs/eventemitter": {
475
- "version": "1.1.0",
476
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
477
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
478
- },
479
- "node_modules/@protobufjs/fetch": {
480
- "version": "1.1.0",
481
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
482
- "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
483
- "dependencies": {
484
- "@protobufjs/aspromise": "^1.1.1",
485
- "@protobufjs/inquire": "^1.1.0"
486
- }
487
- },
488
- "node_modules/@protobufjs/float": {
489
- "version": "1.0.2",
490
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
491
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
492
- },
493
- "node_modules/@protobufjs/inquire": {
494
- "version": "1.1.0",
495
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
496
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
497
- },
498
- "node_modules/@protobufjs/path": {
499
- "version": "1.1.2",
500
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
501
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
502
- },
503
- "node_modules/@protobufjs/pool": {
504
- "version": "1.1.0",
505
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
506
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
507
- },
508
- "node_modules/@protobufjs/utf8": {
509
- "version": "1.1.0",
510
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
511
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
512
- },
513
  "node_modules/@rushstack/eslint-patch": {
514
  "version": "1.5.1",
515
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz",
@@ -594,15 +543,17 @@
594
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
595
  "dev": true
596
  },
597
- "node_modules/@types/long": {
598
- "version": "4.0.2",
599
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
600
- "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
 
601
  },
602
  "node_modules/@types/node": {
603
  "version": "20.8.9",
604
  "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz",
605
  "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==",
 
606
  "dependencies": {
607
  "undici-types": "~5.26.4"
608
  }
@@ -633,6 +584,15 @@
633
  "@types/react": "*"
634
  }
635
  },
 
 
 
 
 
 
 
 
 
636
  "node_modules/@types/scheduler": {
637
  "version": "0.16.5",
638
  "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz",
@@ -747,18 +707,6 @@
747
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
748
  "dev": true
749
  },
750
- "node_modules/@xenova/transformers": {
751
- "version": "2.7.0",
752
- "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.7.0.tgz",
753
- "integrity": "sha512-py5RqZt9lL/FFUT5X6St+TOSBoVaEmDETI98lK9ApEOvlWeX4bTS2nMQDFe3nFMpv24+wllhmPw2Www/f/ubJA==",
754
- "dependencies": {
755
- "onnxruntime-web": "1.14.0",
756
- "sharp": "^0.32.0"
757
- },
758
- "optionalDependencies": {
759
- "onnxruntime-node": "1.14.0"
760
- }
761
- },
762
  "node_modules/@xobotyi/scrollbar-width": {
763
  "version": "1.9.5",
764
  "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz",
@@ -1086,36 +1034,12 @@
1086
  "dequal": "^2.0.3"
1087
  }
1088
  },
1089
- "node_modules/b4a": {
1090
- "version": "1.6.4",
1091
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
1092
- "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="
1093
- },
1094
  "node_modules/balanced-match": {
1095
  "version": "1.0.2",
1096
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1097
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1098
  "dev": true
1099
  },
1100
- "node_modules/base64-js": {
1101
- "version": "1.5.1",
1102
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
1103
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
1104
- "funding": [
1105
- {
1106
- "type": "github",
1107
- "url": "https://github.com/sponsors/feross"
1108
- },
1109
- {
1110
- "type": "patreon",
1111
- "url": "https://www.patreon.com/feross"
1112
- },
1113
- {
1114
- "type": "consulting",
1115
- "url": "https://feross.org/support"
1116
- }
1117
- ]
1118
- },
1119
  "node_modules/binary-extensions": {
1120
  "version": "2.2.0",
1121
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -1125,16 +1049,6 @@
1125
  "node": ">=8"
1126
  }
1127
  },
1128
- "node_modules/bl": {
1129
- "version": "4.1.0",
1130
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
1131
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
1132
- "dependencies": {
1133
- "buffer": "^5.5.0",
1134
- "inherits": "^2.0.4",
1135
- "readable-stream": "^3.4.0"
1136
- }
1137
- },
1138
  "node_modules/brace-expansion": {
1139
  "version": "1.1.11",
1140
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1189,29 +1103,6 @@
1189
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1190
  }
1191
  },
1192
- "node_modules/buffer": {
1193
- "version": "5.7.1",
1194
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
1195
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
1196
- "funding": [
1197
- {
1198
- "type": "github",
1199
- "url": "https://github.com/sponsors/feross"
1200
- },
1201
- {
1202
- "type": "patreon",
1203
- "url": "https://www.patreon.com/feross"
1204
- },
1205
- {
1206
- "type": "consulting",
1207
- "url": "https://feross.org/support"
1208
- }
1209
- ],
1210
- "dependencies": {
1211
- "base64-js": "^1.3.1",
1212
- "ieee754": "^1.1.13"
1213
- }
1214
- },
1215
  "node_modules/busboy": {
1216
  "version": "1.6.0",
1217
  "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
@@ -1329,11 +1220,6 @@
1329
  "node": ">= 6"
1330
  }
1331
  },
1332
- "node_modules/chownr": {
1333
- "version": "1.1.4",
1334
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
1335
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
1336
- },
1337
  "node_modules/classnames": {
1338
  "version": "2.3.2",
1339
  "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
@@ -1344,22 +1230,11 @@
1344
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1345
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1346
  },
1347
- "node_modules/color": {
1348
- "version": "4.2.3",
1349
- "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
1350
- "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
1351
- "dependencies": {
1352
- "color-convert": "^2.0.1",
1353
- "color-string": "^1.9.0"
1354
- },
1355
- "engines": {
1356
- "node": ">=12.5.0"
1357
- }
1358
- },
1359
  "node_modules/color-convert": {
1360
  "version": "2.0.1",
1361
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1362
  "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 
1363
  "dependencies": {
1364
  "color-name": "~1.1.4"
1365
  },
@@ -1370,16 +1245,8 @@
1370
  "node_modules/color-name": {
1371
  "version": "1.1.4",
1372
  "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1373
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1374
- },
1375
- "node_modules/color-string": {
1376
- "version": "1.9.1",
1377
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
1378
- "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
1379
- "dependencies": {
1380
- "color-name": "^1.0.0",
1381
- "simple-swizzle": "^0.2.2"
1382
- }
1383
  },
1384
  "node_modules/commander": {
1385
  "version": "4.1.1",
@@ -1484,28 +1351,6 @@
1484
  }
1485
  }
1486
  },
1487
- "node_modules/decompress-response": {
1488
- "version": "6.0.0",
1489
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
1490
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
1491
- "dependencies": {
1492
- "mimic-response": "^3.1.0"
1493
- },
1494
- "engines": {
1495
- "node": ">=10"
1496
- },
1497
- "funding": {
1498
- "url": "https://github.com/sponsors/sindresorhus"
1499
- }
1500
- },
1501
- "node_modules/deep-extend": {
1502
- "version": "0.6.0",
1503
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
1504
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
1505
- "engines": {
1506
- "node": ">=4.0.0"
1507
- }
1508
- },
1509
  "node_modules/deep-is": {
1510
  "version": "0.1.4",
1511
  "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -1552,14 +1397,6 @@
1552
  "node": ">=6"
1553
  }
1554
  },
1555
- "node_modules/detect-libc": {
1556
- "version": "2.0.2",
1557
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
1558
- "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
1559
- "engines": {
1560
- "node": ">=8"
1561
- }
1562
- },
1563
  "node_modules/didyoumean": {
1564
  "version": "1.2.2",
1565
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@@ -1617,14 +1454,6 @@
1617
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1618
  "dev": true
1619
  },
1620
- "node_modules/end-of-stream": {
1621
- "version": "1.4.4",
1622
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
1623
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
1624
- "dependencies": {
1625
- "once": "^1.4.0"
1626
- }
1627
- },
1628
  "node_modules/enhanced-resolve": {
1629
  "version": "5.15.0",
1630
  "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@@ -2201,24 +2030,11 @@
2201
  "node": ">=0.10.0"
2202
  }
2203
  },
2204
- "node_modules/expand-template": {
2205
- "version": "2.0.3",
2206
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
2207
- "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
2208
- "engines": {
2209
- "node": ">=6"
2210
- }
2211
- },
2212
  "node_modules/fast-deep-equal": {
2213
  "version": "3.1.3",
2214
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2215
  "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
2216
  },
2217
- "node_modules/fast-fifo": {
2218
- "version": "1.3.2",
2219
- "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
2220
- "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
2221
- },
2222
  "node_modules/fast-glob": {
2223
  "version": "3.3.1",
2224
  "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
@@ -2342,11 +2158,6 @@
2342
  "node": ">=12.0.0"
2343
  }
2344
  },
2345
- "node_modules/flatbuffers": {
2346
- "version": "1.12.0",
2347
- "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz",
2348
- "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ=="
2349
- },
2350
  "node_modules/flatted": {
2351
  "version": "3.2.9",
2352
  "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
@@ -2398,11 +2209,6 @@
2398
  }
2399
  }
2400
  },
2401
- "node_modules/fs-constants": {
2402
- "version": "1.0.0",
2403
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
2404
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
2405
- },
2406
  "node_modules/fs.realpath": {
2407
  "version": "1.0.0",
2408
  "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2502,11 +2308,6 @@
2502
  "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
2503
  }
2504
  },
2505
- "node_modules/github-from-package": {
2506
- "version": "0.0.0",
2507
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
2508
- "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
2509
- },
2510
  "node_modules/glob": {
2511
  "version": "7.1.7",
2512
  "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -2617,11 +2418,6 @@
2617
  "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
2618
  "dev": true
2619
  },
2620
- "node_modules/guid-typescript": {
2621
- "version": "1.0.9",
2622
- "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
2623
- "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ=="
2624
- },
2625
  "node_modules/has": {
2626
  "version": "1.0.4",
2627
  "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
@@ -2717,25 +2513,6 @@
2717
  "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
2718
  "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
2719
  },
2720
- "node_modules/ieee754": {
2721
- "version": "1.2.1",
2722
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
2723
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
2724
- "funding": [
2725
- {
2726
- "type": "github",
2727
- "url": "https://github.com/sponsors/feross"
2728
- },
2729
- {
2730
- "type": "patreon",
2731
- "url": "https://www.patreon.com/feross"
2732
- },
2733
- {
2734
- "type": "consulting",
2735
- "url": "https://feross.org/support"
2736
- }
2737
- ]
2738
- },
2739
  "node_modules/ignore": {
2740
  "version": "5.2.4",
2741
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -2783,12 +2560,8 @@
2783
  "node_modules/inherits": {
2784
  "version": "2.0.4",
2785
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2786
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
2787
- },
2788
- "node_modules/ini": {
2789
- "version": "1.3.8",
2790
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
2791
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
2792
  },
2793
  "node_modules/inline-style-prefixer": {
2794
  "version": "6.0.4",
@@ -2827,11 +2600,6 @@
2827
  "url": "https://github.com/sponsors/ljharb"
2828
  }
2829
  },
2830
- "node_modules/is-arrayish": {
2831
- "version": "0.3.2",
2832
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
2833
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
2834
- },
2835
  "node_modules/is-async-function": {
2836
  "version": "2.0.0",
2837
  "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
@@ -3312,17 +3080,17 @@
3312
  "url": "https://github.com/sponsors/sindresorhus"
3313
  }
3314
  },
 
 
 
 
 
3315
  "node_modules/lodash.merge": {
3316
  "version": "4.6.2",
3317
  "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
3318
  "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
3319
  "dev": true
3320
  },
3321
- "node_modules/long": {
3322
- "version": "4.0.0",
3323
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
3324
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
3325
- },
3326
  "node_modules/loose-envify": {
3327
  "version": "1.4.0",
3328
  "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -3338,6 +3106,7 @@
3338
  "version": "6.0.0",
3339
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
3340
  "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
 
3341
  "dependencies": {
3342
  "yallist": "^4.0.0"
3343
  },
@@ -3378,17 +3147,6 @@
3378
  "node": ">=8.6"
3379
  }
3380
  },
3381
- "node_modules/mimic-response": {
3382
- "version": "3.1.0",
3383
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
3384
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
3385
- "engines": {
3386
- "node": ">=10"
3387
- },
3388
- "funding": {
3389
- "url": "https://github.com/sponsors/sindresorhus"
3390
- }
3391
- },
3392
  "node_modules/minimatch": {
3393
  "version": "3.1.2",
3394
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3405,15 +3163,11 @@
3405
  "version": "1.2.8",
3406
  "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
3407
  "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
 
3408
  "funding": {
3409
  "url": "https://github.com/sponsors/ljharb"
3410
  }
3411
  },
3412
- "node_modules/mkdirp-classic": {
3413
- "version": "0.5.3",
3414
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
3415
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
3416
- },
3417
  "node_modules/ms": {
3418
  "version": "2.1.2",
3419
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -3467,11 +3221,6 @@
3467
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3468
  }
3469
  },
3470
- "node_modules/napi-build-utils": {
3471
- "version": "1.0.2",
3472
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
3473
- "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
3474
- },
3475
  "node_modules/natural-compare": {
3476
  "version": "1.4.0",
3477
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -3523,22 +3272,6 @@
3523
  }
3524
  }
3525
  },
3526
- "node_modules/node-abi": {
3527
- "version": "3.51.0",
3528
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz",
3529
- "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==",
3530
- "dependencies": {
3531
- "semver": "^7.3.5"
3532
- },
3533
- "engines": {
3534
- "node": ">=10"
3535
- }
3536
- },
3537
- "node_modules/node-addon-api": {
3538
- "version": "6.1.0",
3539
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
3540
- "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="
3541
- },
3542
  "node_modules/node-releases": {
3543
  "version": "2.0.13",
3544
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
@@ -3567,7 +3300,6 @@
3567
  "version": "4.1.1",
3568
  "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
3569
  "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
3570
- "dev": true,
3571
  "engines": {
3572
  "node": ">=0.10.0"
3573
  }
@@ -3694,50 +3426,11 @@
3694
  "version": "1.4.0",
3695
  "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
3696
  "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
 
3697
  "dependencies": {
3698
  "wrappy": "1"
3699
  }
3700
  },
3701
- "node_modules/onnx-proto": {
3702
- "version": "4.0.4",
3703
- "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz",
3704
- "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==",
3705
- "dependencies": {
3706
- "protobufjs": "^6.8.8"
3707
- }
3708
- },
3709
- "node_modules/onnxruntime-common": {
3710
- "version": "1.14.0",
3711
- "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz",
3712
- "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew=="
3713
- },
3714
- "node_modules/onnxruntime-node": {
3715
- "version": "1.14.0",
3716
- "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz",
3717
- "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==",
3718
- "optional": true,
3719
- "os": [
3720
- "win32",
3721
- "darwin",
3722
- "linux"
3723
- ],
3724
- "dependencies": {
3725
- "onnxruntime-common": "~1.14.0"
3726
- }
3727
- },
3728
- "node_modules/onnxruntime-web": {
3729
- "version": "1.14.0",
3730
- "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz",
3731
- "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==",
3732
- "dependencies": {
3733
- "flatbuffers": "^1.12.0",
3734
- "guid-typescript": "^1.0.9",
3735
- "long": "^4.0.0",
3736
- "onnx-proto": "^4.0.4",
3737
- "onnxruntime-common": "~1.14.0",
3738
- "platform": "^1.3.6"
3739
- }
3740
- },
3741
  "node_modules/optionator": {
3742
  "version": "0.9.3",
3743
  "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
@@ -3874,11 +3567,6 @@
3874
  "node": ">= 6"
3875
  }
3876
  },
3877
- "node_modules/platform": {
3878
- "version": "1.3.6",
3879
- "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
3880
- "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
3881
- },
3882
  "node_modules/postcss": {
3883
  "version": "8.4.31",
3884
  "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -4009,57 +3697,6 @@
4009
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
4010
  "dev": true
4011
  },
4012
- "node_modules/prebuild-install": {
4013
- "version": "7.1.1",
4014
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
4015
- "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
4016
- "dependencies": {
4017
- "detect-libc": "^2.0.0",
4018
- "expand-template": "^2.0.3",
4019
- "github-from-package": "0.0.0",
4020
- "minimist": "^1.2.3",
4021
- "mkdirp-classic": "^0.5.3",
4022
- "napi-build-utils": "^1.0.1",
4023
- "node-abi": "^3.3.0",
4024
- "pump": "^3.0.0",
4025
- "rc": "^1.2.7",
4026
- "simple-get": "^4.0.0",
4027
- "tar-fs": "^2.0.0",
4028
- "tunnel-agent": "^0.6.0"
4029
- },
4030
- "bin": {
4031
- "prebuild-install": "bin.js"
4032
- },
4033
- "engines": {
4034
- "node": ">=10"
4035
- }
4036
- },
4037
- "node_modules/prebuild-install/node_modules/tar-fs": {
4038
- "version": "2.1.1",
4039
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
4040
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
4041
- "dependencies": {
4042
- "chownr": "^1.1.1",
4043
- "mkdirp-classic": "^0.5.2",
4044
- "pump": "^3.0.0",
4045
- "tar-stream": "^2.1.4"
4046
- }
4047
- },
4048
- "node_modules/prebuild-install/node_modules/tar-stream": {
4049
- "version": "2.2.0",
4050
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
4051
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
4052
- "dependencies": {
4053
- "bl": "^4.0.3",
4054
- "end-of-stream": "^1.4.1",
4055
- "fs-constants": "^1.0.0",
4056
- "inherits": "^2.0.3",
4057
- "readable-stream": "^3.1.1"
4058
- },
4059
- "engines": {
4060
- "node": ">=6"
4061
- }
4062
- },
4063
  "node_modules/prelude-ls": {
4064
  "version": "1.2.1",
4065
  "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -4089,47 +3726,12 @@
4089
  "version": "15.8.1",
4090
  "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
4091
  "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
4092
- "dev": true,
4093
  "dependencies": {
4094
  "loose-envify": "^1.4.0",
4095
  "object-assign": "^4.1.1",
4096
  "react-is": "^16.13.1"
4097
  }
4098
  },
4099
- "node_modules/protobufjs": {
4100
- "version": "6.11.4",
4101
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz",
4102
- "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==",
4103
- "hasInstallScript": true,
4104
- "dependencies": {
4105
- "@protobufjs/aspromise": "^1.1.2",
4106
- "@protobufjs/base64": "^1.1.2",
4107
- "@protobufjs/codegen": "^2.0.4",
4108
- "@protobufjs/eventemitter": "^1.1.0",
4109
- "@protobufjs/fetch": "^1.1.0",
4110
- "@protobufjs/float": "^1.0.2",
4111
- "@protobufjs/inquire": "^1.1.0",
4112
- "@protobufjs/path": "^1.1.2",
4113
- "@protobufjs/pool": "^1.1.0",
4114
- "@protobufjs/utf8": "^1.1.0",
4115
- "@types/long": "^4.0.1",
4116
- "@types/node": ">=13.7.0",
4117
- "long": "^4.0.0"
4118
- },
4119
- "bin": {
4120
- "pbjs": "bin/pbjs",
4121
- "pbts": "bin/pbts"
4122
- }
4123
- },
4124
- "node_modules/pump": {
4125
- "version": "3.0.0",
4126
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
4127
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
4128
- "dependencies": {
4129
- "end-of-stream": "^1.1.0",
4130
- "once": "^1.3.1"
4131
- }
4132
- },
4133
  "node_modules/punycode": {
4134
  "version": "2.3.0",
4135
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
@@ -4159,33 +3761,6 @@
4159
  }
4160
  ]
4161
  },
4162
- "node_modules/queue-tick": {
4163
- "version": "1.0.1",
4164
- "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
4165
- "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
4166
- },
4167
- "node_modules/rc": {
4168
- "version": "1.2.8",
4169
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
4170
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
4171
- "dependencies": {
4172
- "deep-extend": "^0.6.0",
4173
- "ini": "~1.3.0",
4174
- "minimist": "^1.2.0",
4175
- "strip-json-comments": "~2.0.1"
4176
- },
4177
- "bin": {
4178
- "rc": "cli.js"
4179
- }
4180
- },
4181
- "node_modules/rc/node_modules/strip-json-comments": {
4182
- "version": "2.0.1",
4183
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
4184
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
4185
- "engines": {
4186
- "node": ">=0.10.0"
4187
- }
4188
- },
4189
  "node_modules/react": {
4190
  "version": "18.2.0",
4191
  "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
@@ -4217,11 +3792,21 @@
4217
  "react": "*"
4218
  }
4219
  },
 
 
 
 
 
 
 
 
 
 
 
4220
  "node_modules/react-is": {
4221
  "version": "16.13.1",
4222
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
4223
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
4224
- "dev": true
4225
  },
4226
  "node_modules/react-universal-interface": {
4227
  "version": "0.6.2",
@@ -4266,19 +3851,6 @@
4266
  "pify": "^2.3.0"
4267
  }
4268
  },
4269
- "node_modules/readable-stream": {
4270
- "version": "3.6.2",
4271
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
4272
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
4273
- "dependencies": {
4274
- "inherits": "^2.0.3",
4275
- "string_decoder": "^1.1.1",
4276
- "util-deprecate": "^1.0.1"
4277
- },
4278
- "engines": {
4279
- "node": ">= 6"
4280
- }
4281
- },
4282
  "node_modules/readdirp": {
4283
  "version": "3.6.0",
4284
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -4447,25 +4019,6 @@
4447
  "url": "https://github.com/sponsors/ljharb"
4448
  }
4449
  },
4450
- "node_modules/safe-buffer": {
4451
- "version": "5.2.1",
4452
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
4453
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
4454
- "funding": [
4455
- {
4456
- "type": "github",
4457
- "url": "https://github.com/sponsors/feross"
4458
- },
4459
- {
4460
- "type": "patreon",
4461
- "url": "https://www.patreon.com/feross"
4462
- },
4463
- {
4464
- "type": "consulting",
4465
- "url": "https://feross.org/support"
4466
- }
4467
- ]
4468
- },
4469
  "node_modules/safe-regex-test": {
4470
  "version": "1.0.0",
4471
  "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
@@ -4503,6 +4056,7 @@
4503
  "version": "7.5.4",
4504
  "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
4505
  "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
 
4506
  "dependencies": {
4507
  "lru-cache": "^6.0.0"
4508
  },
@@ -4550,28 +4104,6 @@
4550
  "node": ">=6.9"
4551
  }
4552
  },
4553
- "node_modules/sharp": {
4554
- "version": "0.32.6",
4555
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz",
4556
- "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==",
4557
- "hasInstallScript": true,
4558
- "dependencies": {
4559
- "color": "^4.2.3",
4560
- "detect-libc": "^2.0.2",
4561
- "node-addon-api": "^6.1.0",
4562
- "prebuild-install": "^7.1.1",
4563
- "semver": "^7.5.4",
4564
- "simple-get": "^4.0.1",
4565
- "tar-fs": "^3.0.4",
4566
- "tunnel-agent": "^0.6.0"
4567
- },
4568
- "engines": {
4569
- "node": ">=14.15.0"
4570
- },
4571
- "funding": {
4572
- "url": "https://opencollective.com/libvips"
4573
- }
4574
- },
4575
  "node_modules/shebang-command": {
4576
  "version": "2.0.0",
4577
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -4607,57 +4139,6 @@
4607
  "url": "https://github.com/sponsors/ljharb"
4608
  }
4609
  },
4610
- "node_modules/simple-concat": {
4611
- "version": "1.0.1",
4612
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
4613
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
4614
- "funding": [
4615
- {
4616
- "type": "github",
4617
- "url": "https://github.com/sponsors/feross"
4618
- },
4619
- {
4620
- "type": "patreon",
4621
- "url": "https://www.patreon.com/feross"
4622
- },
4623
- {
4624
- "type": "consulting",
4625
- "url": "https://feross.org/support"
4626
- }
4627
- ]
4628
- },
4629
- "node_modules/simple-get": {
4630
- "version": "4.0.1",
4631
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
4632
- "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
4633
- "funding": [
4634
- {
4635
- "type": "github",
4636
- "url": "https://github.com/sponsors/feross"
4637
- },
4638
- {
4639
- "type": "patreon",
4640
- "url": "https://www.patreon.com/feross"
4641
- },
4642
- {
4643
- "type": "consulting",
4644
- "url": "https://feross.org/support"
4645
- }
4646
- ],
4647
- "dependencies": {
4648
- "decompress-response": "^6.0.0",
4649
- "once": "^1.3.1",
4650
- "simple-concat": "^1.0.0"
4651
- }
4652
- },
4653
- "node_modules/simple-swizzle": {
4654
- "version": "0.2.2",
4655
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
4656
- "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
4657
- "dependencies": {
4658
- "is-arrayish": "^0.3.1"
4659
- }
4660
- },
4661
  "node_modules/slash": {
4662
  "version": "3.0.0",
4663
  "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -4737,23 +4218,6 @@
4737
  "node": ">=10.0.0"
4738
  }
4739
  },
4740
- "node_modules/streamx": {
4741
- "version": "2.15.1",
4742
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz",
4743
- "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==",
4744
- "dependencies": {
4745
- "fast-fifo": "^1.1.0",
4746
- "queue-tick": "^1.0.1"
4747
- }
4748
- },
4749
- "node_modules/string_decoder": {
4750
- "version": "1.3.0",
4751
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
4752
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
4753
- "dependencies": {
4754
- "safe-buffer": "~5.2.0"
4755
- }
4756
- },
4757
  "node_modules/string.prototype.matchall": {
4758
  "version": "4.0.10",
4759
  "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
@@ -4991,26 +4455,6 @@
4991
  "node": ">=6"
4992
  }
4993
  },
4994
- "node_modules/tar-fs": {
4995
- "version": "3.0.4",
4996
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz",
4997
- "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==",
4998
- "dependencies": {
4999
- "mkdirp-classic": "^0.5.2",
5000
- "pump": "^3.0.0",
5001
- "tar-stream": "^3.1.5"
5002
- }
5003
- },
5004
- "node_modules/tar-stream": {
5005
- "version": "3.1.6",
5006
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
5007
- "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
5008
- "dependencies": {
5009
- "b4a": "^1.6.4",
5010
- "fast-fifo": "^1.2.0",
5011
- "streamx": "^2.15.0"
5012
- }
5013
- },
5014
  "node_modules/text-table": {
5015
  "version": "0.2.0",
5016
  "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -5152,17 +4596,6 @@
5152
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
5153
  "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
5154
  },
5155
- "node_modules/tunnel-agent": {
5156
- "version": "0.6.0",
5157
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
5158
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
5159
- "dependencies": {
5160
- "safe-buffer": "^5.0.1"
5161
- },
5162
- "engines": {
5163
- "node": "*"
5164
- }
5165
- },
5166
  "node_modules/type-check": {
5167
  "version": "0.4.0",
5168
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -5283,7 +4716,8 @@
5283
  "node_modules/undici-types": {
5284
  "version": "5.26.5",
5285
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
5286
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
 
5287
  },
5288
  "node_modules/update-browserslist-db": {
5289
  "version": "1.0.13",
@@ -5335,7 +4769,8 @@
5335
  "node_modules/util-deprecate": {
5336
  "version": "1.0.2",
5337
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
5338
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
 
5339
  },
5340
  "node_modules/v8-compile-cache-lib": {
5341
  "version": "3.0.1",
@@ -5449,12 +4884,14 @@
5449
  "node_modules/wrappy": {
5450
  "version": "1.0.2",
5451
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5452
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
 
5453
  },
5454
  "node_modules/yallist": {
5455
  "version": "4.0.0",
5456
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
5457
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
 
5458
  },
5459
  "node_modules/yaml": {
5460
  "version": "2.3.3",
 
10
  "dependencies": {
11
  "@prisma/client": "^5.5.2",
12
  "@tanstack/react-query": "^4.32.6",
 
13
  "classnames": "^2.3.2",
14
  "filereader": "^0.10.3",
15
  "framer-motion": "^10.16.4",
16
+ "lodash": "^4.17.21",
17
  "next": "13.5.6",
18
  "react": "^18",
19
  "react-dom": "^18",
20
  "react-icons": "^4.11.0",
21
+ "react-infinite-scroller": "^1.2.6",
22
  "react-use": "^17.4.0"
23
  },
24
  "devDependencies": {
25
+ "@types/lodash": "^4.14.200",
26
  "@types/node": "^20.8.9",
27
  "@types/react": "^18",
28
  "@types/react-dom": "^18",
29
+ "@types/react-infinite-scroller": "^1.2.4",
30
  "autoprefixer": "^10",
31
  "eslint": "^8",
32
  "eslint-config-next": "13.5.6",
 
459
  "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a.tgz",
460
  "integrity": "sha512-O+qHFnZvAyOFk1tUco2/VdiqS0ym42a3+6CYLScllmnpbyiTplgyLt2rK/B9BTjYkSHjrgMhkG47S0oqzdIckA=="
461
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
462
  "node_modules/@rushstack/eslint-patch": {
463
  "version": "1.5.1",
464
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz",
 
543
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
544
  "dev": true
545
  },
546
+ "node_modules/@types/lodash": {
547
+ "version": "4.14.200",
548
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz",
549
+ "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==",
550
+ "dev": true
551
  },
552
  "node_modules/@types/node": {
553
  "version": "20.8.9",
554
  "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz",
555
  "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==",
556
+ "dev": true,
557
  "dependencies": {
558
  "undici-types": "~5.26.4"
559
  }
 
584
  "@types/react": "*"
585
  }
586
  },
587
+ "node_modules/@types/react-infinite-scroller": {
588
+ "version": "1.2.4",
589
+ "resolved": "https://registry.npmjs.org/@types/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz",
590
+ "integrity": "sha512-grzrq7XPcn/jAy+ygR0VnlsjmY4RHyobW0teUzG7iLvA/3czjKN79oWeAmnhZEvKUFAW5kk6AqHY9U/yAsiANw==",
591
+ "dev": true,
592
+ "dependencies": {
593
+ "@types/react": "*"
594
+ }
595
+ },
596
  "node_modules/@types/scheduler": {
597
  "version": "0.16.5",
598
  "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz",
 
707
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
708
  "dev": true
709
  },
 
 
 
 
 
 
 
 
 
 
 
 
710
  "node_modules/@xobotyi/scrollbar-width": {
711
  "version": "1.9.5",
712
  "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz",
 
1034
  "dequal": "^2.0.3"
1035
  }
1036
  },
 
 
 
 
 
1037
  "node_modules/balanced-match": {
1038
  "version": "1.0.2",
1039
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1040
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1041
  "dev": true
1042
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1043
  "node_modules/binary-extensions": {
1044
  "version": "2.2.0",
1045
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
 
1049
  "node": ">=8"
1050
  }
1051
  },
 
 
 
 
 
 
 
 
 
 
1052
  "node_modules/brace-expansion": {
1053
  "version": "1.1.11",
1054
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
 
1103
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1104
  }
1105
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1106
  "node_modules/busboy": {
1107
  "version": "1.6.0",
1108
  "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
 
1220
  "node": ">= 6"
1221
  }
1222
  },
 
 
 
 
 
1223
  "node_modules/classnames": {
1224
  "version": "2.3.2",
1225
  "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
 
1230
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1231
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1232
  },
 
 
 
 
 
 
 
 
 
 
 
 
1233
  "node_modules/color-convert": {
1234
  "version": "2.0.1",
1235
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1236
  "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1237
+ "dev": true,
1238
  "dependencies": {
1239
  "color-name": "~1.1.4"
1240
  },
 
1245
  "node_modules/color-name": {
1246
  "version": "1.1.4",
1247
  "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1248
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1249
+ "dev": true
 
 
 
 
 
 
 
 
1250
  },
1251
  "node_modules/commander": {
1252
  "version": "4.1.1",
 
1351
  }
1352
  }
1353
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1354
  "node_modules/deep-is": {
1355
  "version": "0.1.4",
1356
  "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
 
1397
  "node": ">=6"
1398
  }
1399
  },
 
 
 
 
 
 
 
 
1400
  "node_modules/didyoumean": {
1401
  "version": "1.2.2",
1402
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
 
1454
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1455
  "dev": true
1456
  },
 
 
 
 
 
 
 
 
1457
  "node_modules/enhanced-resolve": {
1458
  "version": "5.15.0",
1459
  "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
 
2030
  "node": ">=0.10.0"
2031
  }
2032
  },
 
 
 
 
 
 
 
 
2033
  "node_modules/fast-deep-equal": {
2034
  "version": "3.1.3",
2035
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2036
  "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
2037
  },
 
 
 
 
 
2038
  "node_modules/fast-glob": {
2039
  "version": "3.3.1",
2040
  "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
 
2158
  "node": ">=12.0.0"
2159
  }
2160
  },
 
 
 
 
 
2161
  "node_modules/flatted": {
2162
  "version": "3.2.9",
2163
  "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
 
2209
  }
2210
  }
2211
  },
 
 
 
 
 
2212
  "node_modules/fs.realpath": {
2213
  "version": "1.0.0",
2214
  "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
 
2308
  "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
2309
  }
2310
  },
 
 
 
 
 
2311
  "node_modules/glob": {
2312
  "version": "7.1.7",
2313
  "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
 
2418
  "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
2419
  "dev": true
2420
  },
 
 
 
 
 
2421
  "node_modules/has": {
2422
  "version": "1.0.4",
2423
  "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
 
2513
  "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
2514
  "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
2515
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2516
  "node_modules/ignore": {
2517
  "version": "5.2.4",
2518
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
 
2560
  "node_modules/inherits": {
2561
  "version": "2.0.4",
2562
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2563
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2564
+ "dev": true
 
 
 
 
2565
  },
2566
  "node_modules/inline-style-prefixer": {
2567
  "version": "6.0.4",
 
2600
  "url": "https://github.com/sponsors/ljharb"
2601
  }
2602
  },
 
 
 
 
 
2603
  "node_modules/is-async-function": {
2604
  "version": "2.0.0",
2605
  "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
 
3080
  "url": "https://github.com/sponsors/sindresorhus"
3081
  }
3082
  },
3083
+ "node_modules/lodash": {
3084
+ "version": "4.17.21",
3085
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
3086
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
3087
+ },
3088
  "node_modules/lodash.merge": {
3089
  "version": "4.6.2",
3090
  "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
3091
  "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
3092
  "dev": true
3093
  },
 
 
 
 
 
3094
  "node_modules/loose-envify": {
3095
  "version": "1.4.0",
3096
  "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
 
3106
  "version": "6.0.0",
3107
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
3108
  "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
3109
+ "dev": true,
3110
  "dependencies": {
3111
  "yallist": "^4.0.0"
3112
  },
 
3147
  "node": ">=8.6"
3148
  }
3149
  },
 
 
 
 
 
 
 
 
 
 
 
3150
  "node_modules/minimatch": {
3151
  "version": "3.1.2",
3152
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
 
3163
  "version": "1.2.8",
3164
  "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
3165
  "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
3166
+ "dev": true,
3167
  "funding": {
3168
  "url": "https://github.com/sponsors/ljharb"
3169
  }
3170
  },
 
 
 
 
 
3171
  "node_modules/ms": {
3172
  "version": "2.1.2",
3173
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 
3221
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3222
  }
3223
  },
 
 
 
 
 
3224
  "node_modules/natural-compare": {
3225
  "version": "1.4.0",
3226
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 
3272
  }
3273
  }
3274
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3275
  "node_modules/node-releases": {
3276
  "version": "2.0.13",
3277
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
 
3300
  "version": "4.1.1",
3301
  "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
3302
  "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
 
3303
  "engines": {
3304
  "node": ">=0.10.0"
3305
  }
 
3426
  "version": "1.4.0",
3427
  "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
3428
  "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
3429
+ "dev": true,
3430
  "dependencies": {
3431
  "wrappy": "1"
3432
  }
3433
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3434
  "node_modules/optionator": {
3435
  "version": "0.9.3",
3436
  "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
 
3567
  "node": ">= 6"
3568
  }
3569
  },
 
 
 
 
 
3570
  "node_modules/postcss": {
3571
  "version": "8.4.31",
3572
  "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
 
3697
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
3698
  "dev": true
3699
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3700
  "node_modules/prelude-ls": {
3701
  "version": "1.2.1",
3702
  "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
 
3726
  "version": "15.8.1",
3727
  "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
3728
  "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
 
3729
  "dependencies": {
3730
  "loose-envify": "^1.4.0",
3731
  "object-assign": "^4.1.1",
3732
  "react-is": "^16.13.1"
3733
  }
3734
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3735
  "node_modules/punycode": {
3736
  "version": "2.3.0",
3737
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
 
3761
  }
3762
  ]
3763
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3764
  "node_modules/react": {
3765
  "version": "18.2.0",
3766
  "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
 
3792
  "react": "*"
3793
  }
3794
  },
3795
+ "node_modules/react-infinite-scroller": {
3796
+ "version": "1.2.6",
3797
+ "resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.6.tgz",
3798
+ "integrity": "sha512-mGdMyOD00YArJ1S1F3TVU9y4fGSfVVl6p5gh/Vt4u99CJOptfVu/q5V/Wlle72TMgYlBwIhbxK5wF0C/R33PXQ==",
3799
+ "dependencies": {
3800
+ "prop-types": "^15.5.8"
3801
+ },
3802
+ "peerDependencies": {
3803
+ "react": "^0.14.9 || ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
3804
+ }
3805
+ },
3806
  "node_modules/react-is": {
3807
  "version": "16.13.1",
3808
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
3809
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
 
3810
  },
3811
  "node_modules/react-universal-interface": {
3812
  "version": "0.6.2",
 
3851
  "pify": "^2.3.0"
3852
  }
3853
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
3854
  "node_modules/readdirp": {
3855
  "version": "3.6.0",
3856
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
 
4019
  "url": "https://github.com/sponsors/ljharb"
4020
  }
4021
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4022
  "node_modules/safe-regex-test": {
4023
  "version": "1.0.0",
4024
  "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
 
4056
  "version": "7.5.4",
4057
  "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
4058
  "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
4059
+ "dev": true,
4060
  "dependencies": {
4061
  "lru-cache": "^6.0.0"
4062
  },
 
4104
  "node": ">=6.9"
4105
  }
4106
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4107
  "node_modules/shebang-command": {
4108
  "version": "2.0.0",
4109
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
 
4139
  "url": "https://github.com/sponsors/ljharb"
4140
  }
4141
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4142
  "node_modules/slash": {
4143
  "version": "3.0.0",
4144
  "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
 
4218
  "node": ">=10.0.0"
4219
  }
4220
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4221
  "node_modules/string.prototype.matchall": {
4222
  "version": "4.0.10",
4223
  "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
 
4455
  "node": ">=6"
4456
  }
4457
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4458
  "node_modules/text-table": {
4459
  "version": "0.2.0",
4460
  "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
 
4596
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
4597
  "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
4598
  },
 
 
 
 
 
 
 
 
 
 
 
4599
  "node_modules/type-check": {
4600
  "version": "0.4.0",
4601
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
 
4716
  "node_modules/undici-types": {
4717
  "version": "5.26.5",
4718
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
4719
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
4720
+ "dev": true
4721
  },
4722
  "node_modules/update-browserslist-db": {
4723
  "version": "1.0.13",
 
4769
  "node_modules/util-deprecate": {
4770
  "version": "1.0.2",
4771
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
4772
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
4773
+ "dev": true
4774
  },
4775
  "node_modules/v8-compile-cache-lib": {
4776
  "version": "3.0.1",
 
4884
  "node_modules/wrappy": {
4885
  "version": "1.0.2",
4886
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
4887
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
4888
+ "dev": true
4889
  },
4890
  "node_modules/yallist": {
4891
  "version": "4.0.0",
4892
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
4893
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
4894
+ "dev": true
4895
  },
4896
  "node_modules/yaml": {
4897
  "version": "2.3.3",
package.json CHANGED
@@ -14,16 +14,20 @@
14
  "classnames": "^2.3.2",
15
  "filereader": "^0.10.3",
16
  "framer-motion": "^10.16.4",
 
17
  "next": "13.5.6",
18
  "react": "^18",
19
  "react-dom": "^18",
20
  "react-icons": "^4.11.0",
 
21
  "react-use": "^17.4.0"
22
  },
23
  "devDependencies": {
 
24
  "@types/node": "^20.8.9",
25
  "@types/react": "^18",
26
  "@types/react-dom": "^18",
 
27
  "autoprefixer": "^10",
28
  "eslint": "^8",
29
  "eslint-config-next": "13.5.6",
 
14
  "classnames": "^2.3.2",
15
  "filereader": "^0.10.3",
16
  "framer-motion": "^10.16.4",
17
+ "lodash": "^4.17.21",
18
  "next": "13.5.6",
19
  "react": "^18",
20
  "react-dom": "^18",
21
  "react-icons": "^4.11.0",
22
+ "react-infinite-scroller": "^1.2.6",
23
  "react-use": "^17.4.0"
24
  },
25
  "devDependencies": {
26
+ "@types/lodash": "^4.14.200",
27
  "@types/node": "^20.8.9",
28
  "@types/react": "^18",
29
  "@types/react-dom": "^18",
30
+ "@types/react-infinite-scroller": "^1.2.4",
31
  "autoprefixer": "^10",
32
  "eslint": "^8",
33
  "eslint-config-next": "13.5.6",
prisma/schema.prisma CHANGED
@@ -4,7 +4,7 @@ generator client {
4
 
5
  datasource db {
6
  provider = "sqlite"
7
- url = "file://data/dev.db"
8
  }
9
 
10
  model Image {
 
4
 
5
  datasource db {
6
  provider = "sqlite"
7
+ url = "file:../data/dev.db"
8
  }
9
 
10
  model Image {
utils/type.ts CHANGED
@@ -1,4 +1,13 @@
1
  export interface Collection {
 
 
 
 
 
 
 
 
 
2
  id: string;
3
  blob: {
4
  type: string;
 
1
  export interface Collection {
2
+ pagination: {
3
+ page: number,
4
+ total: number,
5
+ total_pages: number
6
+ },
7
+ images: Array<Image>,
8
+ }
9
+
10
+ export interface Image {
11
  id: string;
12
  blob: {
13
  type: string;