feat(frontend): responsiveness (#1174)

* feat: 🎸 responsiveness chat

* feat: 🎸 responsive

added responsive menu

* feat: 🎸 responsive

brain management

* fix: 🐛 docker

prod
This commit is contained in:
Stan Girard 2023-09-15 01:09:26 +02:00 committed by GitHub
parent a80ca8d5f6
commit 223d3d9102
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 164 additions and 185 deletions

View File

@ -7,6 +7,10 @@ services:
build: build:
context: frontend context: frontend
dockerfile: Dockerfile.dev dockerfile: Dockerfile.dev
volumes:
- ./frontend/:/app
- /app/node_modules
- /app/.next
container_name: web container_name: web
restart: always restart: always
ports: ports:

View File

@ -6,7 +6,7 @@ services:
- ./frontend/.env - ./frontend/.env
build: build:
context: frontend context: frontend
dockerfile: Dockerfile.dev dockerfile: Dockerfile
container_name: web container_name: web
restart: always restart: always
ports: ports:

View File

@ -25,11 +25,11 @@ export const BrainManagementTabs = (): JSX.Element => {
return ( return (
<Root <Root
className="shadow-md min-h-[50%] dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl overflow-hidden bg-white dark:bg-black border border-black/10 dark:border-white/25 p-4 pt-10" className="flex flex-col w-full h-full shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl overflow-hidden bg-white dark:bg-black border border-black/10 dark:border-white/25 p-4 md:p-10"
value={selectedTab} value={selectedTab}
> >
<List <List
className="flex justify-between" className="flex flex-col md:flex-row justify-between space-y-2 md:space-y-0 mb-4"
aria-label={t("subtitle", { ns: "config" })} aria-label={t("subtitle", { ns: "config" })}
> >
<BrainTabTrigger <BrainTabTrigger
@ -52,7 +52,7 @@ export const BrainManagementTabs = (): JSX.Element => {
/> />
</List> </List>
<div className="p-20 pt-5"> <div className="flex-1 p-4 md:p-20">
<Content value="settings"> <Content value="settings">
<SettingsTab brainId={brainId} /> <SettingsTab brainId={brainId} />
</Content> </Content>
@ -63,14 +63,16 @@ export const BrainManagementTabs = (): JSX.Element => {
<KnowledgeTab brainId={brainId} /> <KnowledgeTab brainId={brainId} />
</Content> </Content>
</div> </div>
<div className="flex justify-center">
<div className="flex justify-center mt-4">
<Button <Button
className="px-20 py-2 bg-red-500 text-white rounded-md" className="px-8 md:px-20 py-2 bg-red-500 text-white rounded-md"
onClick={() => setIsDeleteModalOpen(true)} onClick={() => setIsDeleteModalOpen(true)}
> >
{t("deleteButton", { ns: "delete_brain" })} {t("deleteButton", { ns: "delete_brain" })}
</Button> </Button>
</div> </div>
<ConfirmationDeleteModal <ConfirmationDeleteModal
isOpen={isDeleteModalOpen} isOpen={isDeleteModalOpen}
setOpen={setIsDeleteModalOpen} setOpen={setIsDeleteModalOpen}
@ -79,3 +81,5 @@ export const BrainManagementTabs = (): JSX.Element => {
</Root> </Root>
); );
}; };
export default BrainManagementTabs;

View File

@ -23,7 +23,7 @@ const BrainsManagement = (): JSX.Element => {
} }
return ( return (
<main className="flex flex-col w-full pt-20 px-20 mb-10"> <main className="flex flex-col w-full lg:pt-20 lg:px-20 lg:mb-10 sm:pt-4 sm:px-4 sm=mb-2">
<BrainManagementTabs /> <BrainManagementTabs />
</main> </main>
); );

View File

@ -12,32 +12,28 @@ export const ActionsBar = (): JSX.Element => {
hasPendingRequests, hasPendingRequests,
setHasPendingRequests, setHasPendingRequests,
} = useActionBar(); } = useActionBar();
const { addContent, contents, feedBrain, removeContent } =
useKnowledgeUploader({ const { addContent, contents, feedBrain, removeContent } = useKnowledgeUploader({
setHasPendingRequests, setHasPendingRequests,
setShouldDisplayUploadCard, setShouldDisplayUploadCard,
}); });
const { t } = useTranslation(["chat"]); const { t } = useTranslation(["chat"]);
return ( return (
<> <>
{hasPendingRequests && ( {hasPendingRequests && (
<div className="flex mt-1 flex-row w-full shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl bg-white dark:bg-black border border-black/10 dark:border-white/25 p-2 pl-6"> <div className="flex mt-1 flex-col md:flex-row w-full shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl bg-white dark:bg-black border border-black/10 dark:border-white/25 p-2 md:p-6 pl-6">
<div className="flex flex-1 items-center"> <div className="flex flex-1 items-center mb-2 md:mb-0">
<span className="text-1xl">{t("filesUploading")}</span> <span className="text-sm md:text-1xl">{t("filesUploading")}</span>
</div> </div>
<AiOutlineLoading3Quarters className="animate-spin text-3xl" /> <AiOutlineLoading3Quarters className="animate-spin text-2xl md:text-3xl self-center" />
</div> </div>
)} )}
<div <div className={shouldDisplayUploadCard ? "h-full flex flex-col flex-auto" : ""}>
className={
shouldDisplayUploadCard ? "h-full flex flex-col flex-auto" : ""
}
>
{shouldDisplayUploadCard && ( {shouldDisplayUploadCard && (
<div className="flex flex-1 overflow-y-scroll shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl bg-white dark:bg-black border border-black/10 dark:border-white/25 p-6"> <div className="flex flex-1 overflow-y-scroll shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl bg-white dark:bg-black border border-black/10 dark:border-white/25 p-4 md:p-6">
<KnowledgeToFeed <KnowledgeToFeed
onClose={() => setShouldDisplayUploadCard(false)} onClose={() => setShouldDisplayUploadCard(false)}
contents={contents} contents={contents}
@ -46,7 +42,7 @@ export const ActionsBar = (): JSX.Element => {
/> />
</div> </div>
)} )}
<div className="flex mt-1 flex-col w-full shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl bg-white dark:bg-black border border-black/10 dark:border-white/25 p-6"> <div className="flex mt-1 flex-col w-full shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl bg-white dark:bg-black border border-black/10 dark:border-white/25 p-4 md:p-6">
<ChatInput <ChatInput
shouldDisplayUploadCard={shouldDisplayUploadCard} shouldDisplayUploadCard={shouldDisplayUploadCard}
setShouldDisplayUploadCard={setShouldDisplayUploadCard} setShouldDisplayUploadCard={setShouldDisplayUploadCard}

View File

@ -20,7 +20,7 @@ export const ChatBar = ({
useBrainContext(); useBrainContext();
return ( return (
<div className="flex flex-row flex-1 w-full item-start"> <div className="flex flex-row flex-1 w-full item-start overflow-y-auto max-h-[10em] whitespace-pre-wrap">
{currentBrain !== undefined && ( {currentBrain !== undefined && (
<MentionItem <MentionItem
text={currentBrain.name} text={currentBrain.name}

View File

@ -18,7 +18,7 @@ export const MentionItem = ({
<div className="flex items-center bg-gray-300 mr-2 text-gray-600 rounded-2xl py-1 px-2"> <div className="flex items-center bg-gray-300 mr-2 text-gray-600 rounded-2xl py-1 px-2">
<span className="flex-grow">{`${trigger ?? ""}${text}`}</span> <span className="flex-grow">{`${trigger ?? ""}${text}`}</span>
<MdRemoveCircleOutline <MdRemoveCircleOutline
className="cursor-pointer absolute top-[-10px] right-[5px]" className="cursor-pointer absolute top-0 right-0 mt-0 mr-0"
onClick={onRemove} onClick={onRemove}
/> />
</div> </div>

View File

@ -1,4 +1,4 @@
/* eslint-disable max-lines */ /* eslint-disable */
"use client"; "use client";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { MdAddCircle, MdSend } from "react-icons/md"; import { MdAddCircle, MdSend } from "react-icons/md";
@ -24,11 +24,12 @@ export const ChatInput = ({
setShouldDisplayUploadCard, setShouldDisplayUploadCard,
hasContentToFeedBrain, hasContentToFeedBrain,
}: ChatInputProps): JSX.Element => { }: ChatInputProps): JSX.Element => {
const { setMessage, submitQuestion, chatId, generatingAnswer, message } = const { setMessage, submitQuestion, chatId, generatingAnswer, message } = useChatInput();
useChatInput();
const { t } = useTranslation(["chat"]); const { t } = useTranslation(["chat"]);
const { currentBrainId } = useBrainContext(); const { currentBrainId } = useBrainContext();
const isEmptyMessage = !message || message.trim() === '';
return ( return (
<form <form
data-testid="chat-input-form" data-testid="chat-input-form"
@ -36,20 +37,18 @@ export const ChatInput = ({
e.preventDefault(); e.preventDefault();
submitQuestion(); submitQuestion();
}} }}
className="sticky flex items-star bottom-0 bg-white dark:bg-black w-full flex justify-center gap-2 z-20" className="sticky bottom-0 bg-white dark:bg-black w-full flex items-center gap-2 z-20 p-2"
> >
{!shouldDisplayUploadCard && ( {!shouldDisplayUploadCard && (
<div className="flex items-start"> <Button
<Button className="p-0"
className="p-0" variant={"tertiary"}
variant={"tertiary"} data-testid="upload-button"
data-testid="upload-button" type="button"
type="button" onClick={() => setShouldDisplayUploadCard(true)}
onClick={() => setShouldDisplayUploadCard(true)} >
> <MdAddCircle className="text-3xl" />
<MdAddCircle className="text-3xl" /> </Button>
</Button>
</div>
)} )}
<div className="flex flex-1 flex-col items-center"> <div className="flex flex-1 flex-col items-center">
@ -66,29 +65,33 @@ export const ChatInput = ({
<div className="flex flex-row items-end"> <div className="flex flex-row items-end">
{shouldDisplayUploadCard ? ( {shouldDisplayUploadCard ? (
<div className="flex items-center"> <Button
<Button disabled={currentBrainId === null || !hasContentToFeedBrain}
disabled={currentBrainId === null || !hasContentToFeedBrain} variant="tertiary"
variant="tertiary" onClick={feedBrain}
onClick={feedBrain} type="button"
type="button" >
> <MdSend className="text-3xl transform -rotate-90" />
<MdSend className="text-3xl transform -rotate-90" /> </Button>
</Button>
</div>
) : ( ) : (
<> <>
<Button {isEmptyMessage ? (
className="px-3 py-2 sm:px-4 sm:py-2" <div className="md:hidden flex items-center">
type="submit" <ConfigModal chatId={chatId} />
isLoading={generatingAnswer} </div>
data-testid="submit-button" ) : (
> <Button
{generatingAnswer className="px-3 py-2 sm:px-4 sm:py-2"
? t("thinking", { ns: "chat" }) type="submit"
: t("chat", { ns: "chat" })} isLoading={generatingAnswer}
</Button> data-testid="submit-button"
<div className="flex items-center"> >
{generatingAnswer
? t("thinking", { ns: "chat" })
: t("chat", { ns: "chat" })}
</Button>
)}
<div className="hidden md:flex items-center">
<ConfigModal chatId={chatId} /> <ConfigModal chatId={chatId} />
</div> </div>
</> </>
@ -96,4 +99,4 @@ export const ChatInput = ({
</div> </div>
</form> </form>
); );
}; };

View File

@ -8,16 +8,17 @@ export const ChatHeader = (): JSX.Element => {
if (messages.length !== 0) { if (messages.length !== 0) {
return ( return (
<h1 className="text-3xl font-bold text-center"> <h1 className="hidden lg:block text-3xl font-bold text-center">
{t("chat_title_intro")}{" "} {t("chat_title_intro")}{" "}
<span className="text-purple-500">{t("brains")}</span> <span className="text-purple-500">{t("brains")}</span>
</h1> </h1>
); );
} }
return ( return (
<h1 className="text-3xl font-bold text-center"> <h1 className="hidden lg:block text-3xl font-bold text-center">
{t("chat_title_intro")}{" "} {t("chat_title_intro")}{" "}
<span className="text-purple-500">{t("brains")}</span> <span className="text-purple-500">{t("brains")}</span>
{" !! "} {" !! "}
<br /> <br />

View File

@ -6,17 +6,17 @@ import { ChatHeader } from "./components/ChatHeader";
const SelectedChatPage = (): JSX.Element => { const SelectedChatPage = (): JSX.Element => {
return ( return (
<main className="flex flex-col w-full pt-10" data-testid="chat-page"> <main className="flex flex-col w-full h-[calc(100vh-61px)] overflow-hidden" data-testid="chat-page">
<section className="flex flex-col flex-1 items-center w-full h-full min-h-[70vh]"> <section className="flex flex-col flex-1 items-center w-full h-full overflow-y-auto">
<ChatHeader /> <ChatHeader /> {/* Added margin-bottom */}
<div className="flex-1 flex flex-col mt-8 w-full shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl overflow-hidden bg-white dark:bg-black border border-black/10 dark:border-white/25 p-12 pt-10 max-h-[80vh]"> <div className="flex-1 flex flex-col mt-4 md:mt-8 w-full shadow-md dark:shadow-primary/25 hover:shadow-xl transition-shadow rounded-xl overflow-hidden bg-white dark:bg-black border border-black/10 dark:border-white/25 p-2 md:p-12 pt-4 md:pt-10">
<div className="flex flex-1 flex-col overflow-hidden"> <div className="flex flex-1 flex-col overflow-y-auto">
<ChatDialogueArea /> <ChatDialogueArea />
</div> </div>
<ActionsBar /> <ActionsBar/> {/* Added margin-top */}
</div> </div>
</section> </section>
</main> </main>
); );
}; };

View File

@ -1,60 +1,17 @@
import * as Dialog from "@radix-ui/react-dialog"; /* eslint-disable */
import { AnimatePresence, motion } from "framer-motion";
import { useState } from "react"; import { useState } from "react";
import { MdClose, MdMenu } from "react-icons/md";
import { NavItems } from "./NavItems"; import { NavItems } from "./NavItems";
export const MobileMenu = (): JSX.Element => { export const MobileMenu = (): JSX.Element => {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
return ( return (
<Dialog.Root onOpenChange={setOpen} open={open}> <div className="md:hidden flex flex-row items-center justify-between px-6 sm:hidden">
<Dialog.Trigger asChild> <NavItems
<button className="block sm:hidden" aria-label="open menu"> setOpen={setOpen}
<MdMenu className="text-4xl" /> className="text-3xl gap-10"
</button> />
</Dialog.Trigger> </div>
<AnimatePresence> );
{open ? (
<Dialog.Portal forceMount>
<Dialog.Overlay asChild forceMount>
<motion.div
className="fixed inset-0 flex overflow-auto cursor-pointer z-50 shadow-xl dark:shadow-primary/25"
initial={{ opacity: 1, y: "-100%" }}
animate={{ opacity: 1, y: "0%" }}
exit={{ opacity: 1, y: "-100%" }}
transition={{ duration: 0.4, ease: "circOut" }}
>
<Dialog.Content asChild forceMount>
<div className="flex flex-col items-center justify-between py-24 flex-1 w-full bg-white dark:bg-black border border-black/10 dark:border-white/25 p-10 shadow-xl dark:shadow-primary/50 focus:outline-none cursor-auto z-50">
<NavItems
setOpen={setOpen}
className="text-3xl h-fit text-center flex-col items-center justify-center gap-10"
/>
<p className="">
Get a Second Brain with{" "}
<span className="text-primary dark:bg-white rounded-sm">
Quivr
</span>
</p>
<Dialog.Close asChild>
<button
className="absolute top-0 p-3 right-0 flex items-center justify-center gap-2 appearance-none rounded-full focus:shadow-sm focus:outline-none"
aria-label="close menu"
>
<MdClose className="text-4xl" />
</button>
</Dialog.Close>
</div>
</Dialog.Content>
</motion.div>
</Dialog.Overlay>
</Dialog.Portal>
) : null}
</AnimatePresence>
</Dialog.Root>
);
}; };

View File

@ -42,7 +42,7 @@ export const NavItems = ({
</NavLink> </NavLink>
</> </>
)} )}
<div className="flex sm:flex-1 sm:justify-end flex-col items-center justify-center sm:flex-row gap-5 sm:gap-2"> <div className="flex sm:flex-1 sm:justify-end flex-row items-center justify-center sm:flex-row gap-5 sm:gap-2">
{isUserLoggedIn && ( {isUserLoggedIn && (
<> <>
<BrainManagementButton /> <BrainManagementButton />

View File

@ -58,7 +58,7 @@
"i18next": "^23.4.1", "i18next": "^23.4.1",
"i18next-http-backend": "^2.2.1", "i18next-http-backend": "^2.2.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"next": "13.4.2", "next": "13.4.19",
"nock": "^13.3.1", "nock": "^13.3.1",
"postcss": "8.4.23", "postcss": "8.4.23",
"prettier": "^2.8.8", "prettier": "^2.8.8",
@ -87,4 +87,4 @@
"react-icons": "^4.8.0", "react-icons": "^4.8.0",
"vitest": "^0.32.2" "vitest": "^0.32.2"
} }
} }

View File

@ -641,10 +641,10 @@
dependencies: dependencies:
"@lukeed/csprng" "^1.1.0" "@lukeed/csprng" "^1.1.0"
"@next/env@13.4.2": "@next/env@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.npmjs.org/@next/env/-/env-13.4.2.tgz" resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.19.tgz#46905b4e6f62da825b040343cbc233144e9578d3"
integrity sha512-Wqvo7lDeS0KGwtwg9TT9wKQ8raelmUxt+TQKWvG/xKfcmDXNOtCuaszcfCF8JzlBG1q0VhpI6CKaRMbVPMDWgw== integrity sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==
"@next/eslint-plugin-next@13.4.2": "@next/eslint-plugin-next@13.4.2":
version "13.4.2" version "13.4.2"
@ -653,50 +653,50 @@
dependencies: dependencies:
glob "7.1.7" glob "7.1.7"
"@next/swc-darwin-arm64@13.4.2": "@next/swc-darwin-arm64@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.2.tgz" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz#77ad462b5ced4efdc26cb5a0053968d2c7dac1b6"
integrity sha512-6BBlqGu3ewgJflv9iLCwO1v1hqlecaIH2AotpKfVUEzUxuuDNJQZ2a4KLb4MBl8T9/vca1YuWhSqtbF6ZuUJJw== integrity sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==
"@next/swc-darwin-x64@13.4.2": "@next/swc-darwin-x64@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.2.tgz#09a800bed8dfe4beec4cbf14092f9c22db24470b" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz#aebe38713a4ce536ee5f2a291673e14b715e633a"
integrity sha512-iZuYr7ZvGLPjPmfhhMl0ISm+z8EiyLBC1bLyFwGBxkWmPXqdJ60mzuTaDSr5WezDwv0fz32HB7JHmRC6JVHSZg== integrity sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==
"@next/swc-linux-arm64-gnu@13.4.2": "@next/swc-linux-arm64-gnu@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.2.tgz#b7ade28834564120b0b25ffa0b79d75982d290bc" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz#ec54db65b587939c7b94f9a84800f003a380f5a6"
integrity sha512-2xVabFtIge6BJTcJrW8YuUnYTuQjh4jEuRuS2mscyNVOj6zUZkom3CQg+egKOoS+zh2rrro66ffSKIS+ztFJTg== integrity sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==
"@next/swc-linux-arm64-musl@13.4.2": "@next/swc-linux-arm64-musl@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.2.tgz#f5420548234d35251630ddaa2e9a7dc32337a887" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz#1f5e2c1ea6941e7d530d9f185d5d64be04279d86"
integrity sha512-wKRCQ27xCUJx5d6IivfjYGq8oVngqIhlhSAJntgXLt7Uo9sRT/3EppMHqUZRfyuNBTbykEre1s5166z+pvRB5A== integrity sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==
"@next/swc-linux-x64-gnu@13.4.2": "@next/swc-linux-x64-gnu@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.2.tgz#0241dc011d73f08df9d9998cffdfcf08d1971520" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz#96b0882492a2f7ffcce747846d3680730f69f4d1"
integrity sha512-NpCa+UVhhuNeaFVUP1Bftm0uqtvLWq2JTm7+Ta48+2Uqj2mNXrDIvyn1DY/ZEfmW/1yvGBRaUAv9zkMkMRixQA== integrity sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==
"@next/swc-linux-x64-musl@13.4.2": "@next/swc-linux-x64-musl@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.2.tgz#fd35919e2b64b1c739583145799fefd594ef5d63" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz#f276b618afa321d2f7b17c81fc83f429fb0fd9d8"
integrity sha512-ZWVC72x0lW4aj44e3khvBrj2oSYj1bD0jESmyah3zG/3DplEy/FOtYkMzbMjHTdDSheso7zH8GIlW6CDQnKhmQ== integrity sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==
"@next/swc-win32-arm64-msvc@13.4.2": "@next/swc-win32-arm64-msvc@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.2.tgz#fa95d2dbb97707c130a868a1bd7e83e64bedf4c6" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz#1599ae0d401da5ffca0947823dac577697cce577"
integrity sha512-pLT+OWYpzJig5K4VKhLttlIfBcVZfr2+Xbjra0Tjs83NQSkFS+y7xx+YhCwvpEmXYLIvaggj2ONPyjbiigOvHQ== integrity sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==
"@next/swc-win32-ia32-msvc@13.4.2": "@next/swc-win32-ia32-msvc@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.2.tgz#31a98e61d3cda92ec2293c50df7cb5280fc63697" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz#55cdd7da90818f03e4da16d976f0cb22045d16fd"
integrity sha512-dhpiksQCyGca4WY0fJyzK3FxMDFoqMb0Cn+uDB+9GYjpU2K5//UGPQlCwiK4JHxuhg8oLMag5Nf3/IPSJNG8jw== integrity sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==
"@next/swc-win32-x64-msvc@13.4.2": "@next/swc-win32-x64-msvc@13.4.19":
version "13.4.2" version "13.4.19"
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.2.tgz#8435ab6087046355f5de07122d3097949e8fab10" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz#648f79c4e09279212ac90d871646ae12d80cdfce"
integrity sha512-O7bort1Vld00cu8g0jHZq3cbSTUNMohOEvYqsqE10+yfohhdPHzvzO+ziJRz4Dyyr/fYKREwS7gR4JC0soSOMw== integrity sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
@ -4355,6 +4355,11 @@ glob-parent@^6.0.2:
dependencies: dependencies:
is-glob "^4.0.3" is-glob "^4.0.3"
glob-to-regexp@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
glob@7.1.6: glob@7.1.6:
version "7.1.6" version "7.1.6"
resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"
@ -4451,7 +4456,7 @@ gopd@^1.0.1:
dependencies: dependencies:
get-intrinsic "^1.1.3" get-intrinsic "^1.1.3"
graceful-fs@^4.2.4: graceful-fs@^4.1.2, graceful-fs@^4.2.4:
version "4.2.11" version "4.2.11"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@ -5606,28 +5611,29 @@ next-tick@^1.1.0:
resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz"
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
next@13.4.2: next@13.4.19:
version "13.4.2" version "13.4.19"
resolved "https://registry.npmjs.org/next/-/next-13.4.2.tgz" resolved "https://registry.yarnpkg.com/next/-/next-13.4.19.tgz#2326e02aeedee2c693d4f37b90e4f0ed6882b35f"
integrity sha512-aNFqLs3a3nTGvLWlO9SUhCuMUHVPSFQC0+tDNGAsDXqx+WJDFSbvc233gOJ5H19SBc7nw36A9LwQepOJ2u/8Kg== integrity sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==
dependencies: dependencies:
"@next/env" "13.4.2" "@next/env" "13.4.19"
"@swc/helpers" "0.5.1" "@swc/helpers" "0.5.1"
busboy "1.6.0" busboy "1.6.0"
caniuse-lite "^1.0.30001406" caniuse-lite "^1.0.30001406"
postcss "8.4.14" postcss "8.4.14"
styled-jsx "5.1.1" styled-jsx "5.1.1"
watchpack "2.4.0"
zod "3.21.4" zod "3.21.4"
optionalDependencies: optionalDependencies:
"@next/swc-darwin-arm64" "13.4.2" "@next/swc-darwin-arm64" "13.4.19"
"@next/swc-darwin-x64" "13.4.2" "@next/swc-darwin-x64" "13.4.19"
"@next/swc-linux-arm64-gnu" "13.4.2" "@next/swc-linux-arm64-gnu" "13.4.19"
"@next/swc-linux-arm64-musl" "13.4.2" "@next/swc-linux-arm64-musl" "13.4.19"
"@next/swc-linux-x64-gnu" "13.4.2" "@next/swc-linux-x64-gnu" "13.4.19"
"@next/swc-linux-x64-musl" "13.4.2" "@next/swc-linux-x64-musl" "13.4.19"
"@next/swc-win32-arm64-msvc" "13.4.2" "@next/swc-win32-arm64-msvc" "13.4.19"
"@next/swc-win32-ia32-msvc" "13.4.2" "@next/swc-win32-ia32-msvc" "13.4.19"
"@next/swc-win32-x64-msvc" "13.4.2" "@next/swc-win32-x64-msvc" "13.4.19"
nock@^13.3.1: nock@^13.3.1:
version "13.3.2" version "13.3.2"
@ -7760,6 +7766,14 @@ warning@^4.0.2:
dependencies: dependencies:
loose-envify "^1.0.0" loose-envify "^1.0.0"
watchpack@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
dependencies:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
webidl-conversions@^3.0.0: webidl-conversions@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"