mirror of
https://github.com/StanGirard/quivr.git
synced 2024-11-27 10:20:32 +03:00
feat: add remote notification config (#1547)
Issue: https://github.com/StanGirard/quivr/issues/1503 Demo: https://github.com/StanGirard/quivr/assets/63923024/fc354768-e25b-4d16-8e40-bfdbf950ddcd
This commit is contained in:
parent
8a8e3d1a65
commit
867904f19d
@ -0,0 +1,63 @@
|
||||
{
|
||||
"kind": "singleType",
|
||||
"collectionName": "notification_banners",
|
||||
"info": {
|
||||
"singularName": "notification-banner",
|
||||
"pluralName": "notification-banners",
|
||||
"displayName": "Notification banner"
|
||||
},
|
||||
"options": {
|
||||
"draftAndPublish": true
|
||||
},
|
||||
"pluginOptions": {
|
||||
"i18n": {
|
||||
"localized": true
|
||||
}
|
||||
},
|
||||
"attributes": {
|
||||
"notification_id": {
|
||||
"pluginOptions": {
|
||||
"i18n": {
|
||||
"localized": true
|
||||
}
|
||||
},
|
||||
"type": "uid",
|
||||
"required": true
|
||||
},
|
||||
"text": {
|
||||
"pluginOptions": {
|
||||
"i18n": {
|
||||
"localized": true
|
||||
}
|
||||
},
|
||||
"type": "richtext",
|
||||
"required": true
|
||||
},
|
||||
"dismissible": {
|
||||
"pluginOptions": {
|
||||
"i18n": {
|
||||
"localized": false
|
||||
}
|
||||
},
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"isSticky": {
|
||||
"pluginOptions": {
|
||||
"i18n": {
|
||||
"localized": false
|
||||
}
|
||||
},
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"style": {
|
||||
"pluginOptions": {
|
||||
"i18n": {
|
||||
"localized": false
|
||||
}
|
||||
},
|
||||
"type": "json"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* notification-banner controller
|
||||
*/
|
||||
|
||||
const { createCoreController } = require('@strapi/strapi').factories;
|
||||
|
||||
module.exports = createCoreController('api::notification-banner.notification-banner');
|
@ -0,0 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* notification-banner router
|
||||
*/
|
||||
|
||||
const { createCoreRouter } = require('@strapi/strapi').factories;
|
||||
|
||||
module.exports = createCoreRouter('api::notification-banner.notification-banner');
|
@ -0,0 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* notification-banner service
|
||||
*/
|
||||
|
||||
const { createCoreService } = require('@strapi/strapi').factories;
|
||||
|
||||
module.exports = createCoreService('api::notification-banner.notification-banner');
|
76
cms/quivr/types/generated/contentTypes.d.ts
vendored
76
cms/quivr/types/generated/contentTypes.d.ts
vendored
@ -799,6 +799,81 @@ export interface ApiDiscussionDiscussion extends Schema.CollectionType {
|
||||
};
|
||||
}
|
||||
|
||||
export interface ApiNotificationBannerNotificationBanner
|
||||
extends Schema.SingleType {
|
||||
collectionName: 'notification_banners';
|
||||
info: {
|
||||
singularName: 'notification-banner';
|
||||
pluralName: 'notification-banners';
|
||||
displayName: 'Notification banner';
|
||||
};
|
||||
options: {
|
||||
draftAndPublish: true;
|
||||
};
|
||||
pluginOptions: {
|
||||
i18n: {
|
||||
localized: true;
|
||||
};
|
||||
};
|
||||
attributes: {
|
||||
notification_id: Attribute.UID &
|
||||
Attribute.Required &
|
||||
Attribute.SetPluginOptions<{
|
||||
i18n: {
|
||||
localized: true;
|
||||
};
|
||||
}>;
|
||||
text: Attribute.RichText &
|
||||
Attribute.Required &
|
||||
Attribute.SetPluginOptions<{
|
||||
i18n: {
|
||||
localized: true;
|
||||
};
|
||||
}>;
|
||||
dismissible: Attribute.Boolean &
|
||||
Attribute.SetPluginOptions<{
|
||||
i18n: {
|
||||
localized: false;
|
||||
};
|
||||
}> &
|
||||
Attribute.DefaultTo<true>;
|
||||
isSticky: Attribute.Boolean &
|
||||
Attribute.SetPluginOptions<{
|
||||
i18n: {
|
||||
localized: false;
|
||||
};
|
||||
}> &
|
||||
Attribute.DefaultTo<true>;
|
||||
style: Attribute.JSON &
|
||||
Attribute.SetPluginOptions<{
|
||||
i18n: {
|
||||
localized: false;
|
||||
};
|
||||
}>;
|
||||
createdAt: Attribute.DateTime;
|
||||
updatedAt: Attribute.DateTime;
|
||||
publishedAt: Attribute.DateTime;
|
||||
createdBy: Attribute.Relation<
|
||||
'api::notification-banner.notification-banner',
|
||||
'oneToOne',
|
||||
'admin::user'
|
||||
> &
|
||||
Attribute.Private;
|
||||
updatedBy: Attribute.Relation<
|
||||
'api::notification-banner.notification-banner',
|
||||
'oneToOne',
|
||||
'admin::user'
|
||||
> &
|
||||
Attribute.Private;
|
||||
localizations: Attribute.Relation<
|
||||
'api::notification-banner.notification-banner',
|
||||
'oneToMany',
|
||||
'api::notification-banner.notification-banner'
|
||||
>;
|
||||
locale: Attribute.String;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ApiSecurityQuestionSecurityQuestion
|
||||
extends Schema.CollectionType {
|
||||
collectionName: 'security_questions';
|
||||
@ -1013,6 +1088,7 @@ declare module '@strapi/types' {
|
||||
'api::blog.blog': ApiBlogBlog;
|
||||
'api::demo-video.demo-video': ApiDemoVideoDemoVideo;
|
||||
'api::discussion.discussion': ApiDiscussionDiscussion;
|
||||
'api::notification-banner.notification-banner': ApiNotificationBannerNotificationBanner;
|
||||
'api::security-question.security-question': ApiSecurityQuestionSecurityQuestion;
|
||||
'api::testimonial.testimonial': ApiTestimonialTestimonial;
|
||||
'api::use-case.use-case': ApiUseCaseUseCase;
|
||||
|
@ -11,22 +11,24 @@ const SelectedChatPage = (): JSX.Element => {
|
||||
const { shouldDisplayFeedCard } = useKnowledgeToFeedContext();
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`flex flex-col flex-1 items-center justify-stretch w-full h-fill-available overflow-hidden ${
|
||||
shouldDisplayFeedCard ? "bg-chat-bg-gray" : "bg-white"
|
||||
} dark:bg-black transition-colors ease-out duration-500`}
|
||||
data-testid="chat-page"
|
||||
{...getRootProps()}
|
||||
>
|
||||
<>
|
||||
<div
|
||||
className={`flex flex-col flex-1 w-full max-w-5xl h-full dark:shadow-primary/25 overflow-hidden p-2 sm:p-4 md:p-6 lg:p-8`}
|
||||
className={`flex flex-col flex-1 items-center justify-stretch w-full h-full overflow-hidden ${
|
||||
shouldDisplayFeedCard ? "bg-chat-bg-gray" : "bg-white"
|
||||
} dark:bg-black transition-colors ease-out duration-500`}
|
||||
data-testid="chat-page"
|
||||
{...getRootProps()}
|
||||
>
|
||||
<div className="flex flex-1 flex-col overflow-y-auto">
|
||||
<ChatDialogueArea />
|
||||
<div
|
||||
className={`flex flex-col flex-1 w-full max-w-5xl h-full dark:shadow-primary/25 overflow-hidden p-2 sm:p-4 md:p-6 lg:p-8`}
|
||||
>
|
||||
<div className="flex flex-1 flex-col overflow-y-auto">
|
||||
<ChatDialogueArea />
|
||||
</div>
|
||||
<ActionsBar />
|
||||
</div>
|
||||
<ActionsBar />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -0,0 +1,47 @@
|
||||
import { Fragment } from "react";
|
||||
import { MdClose } from "react-icons/md";
|
||||
import ReactMarkdown from "react-markdown";
|
||||
import rehypeRaw from "rehype-raw";
|
||||
|
||||
import Button from "@/lib/components/ui/Button";
|
||||
|
||||
import { useNotificationBanner } from "./hooks/useNotificationBanner";
|
||||
|
||||
export const NotificationBanner = (): JSX.Element => {
|
||||
const { notificationBanner, isDismissed, dismissNotification } =
|
||||
useNotificationBanner();
|
||||
|
||||
if (isDismissed || notificationBanner === undefined) {
|
||||
return <Fragment />;
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
position: "relative",
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
...notificationBanner.style,
|
||||
}}
|
||||
>
|
||||
<ReactMarkdown
|
||||
rehypePlugins={[
|
||||
//@ts-expect-error bad typing from rehype-raw
|
||||
rehypeRaw,
|
||||
]}
|
||||
>
|
||||
{notificationBanner.text}
|
||||
</ReactMarkdown>
|
||||
{Boolean(notificationBanner.dismissible) && (
|
||||
<Button
|
||||
variant="tertiary"
|
||||
onClick={dismissNotification}
|
||||
className="right-2 p-0 absolute bg-white hover:bg-gray-300"
|
||||
>
|
||||
<MdClose size={20} />
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
@ -0,0 +1,60 @@
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
|
||||
import { NOTIFICATION_BANNER_DATA_KEY } from "@/lib/api/cms/config";
|
||||
import { useCmsApi } from "@/lib/api/cms/useCmsApi";
|
||||
|
||||
import {
|
||||
clearLocalStorageNotificationBanner,
|
||||
getNotificationFromLocalStorage,
|
||||
setNotificationAsDismissedInLocalStorage,
|
||||
} from "../utils";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
export const useNotificationBanner = () => {
|
||||
const [isDismissed, setIsDismissed] = useState(true);
|
||||
|
||||
const { getNotificationBanner } = useCmsApi();
|
||||
const { data: notificationBanner } = useQuery({
|
||||
queryKey: [NOTIFICATION_BANNER_DATA_KEY],
|
||||
queryFn: getNotificationBanner,
|
||||
});
|
||||
|
||||
const dismissNotification = useCallback(() => {
|
||||
if (notificationBanner?.id === undefined) {
|
||||
return;
|
||||
}
|
||||
setNotificationAsDismissedInLocalStorage(notificationBanner.id);
|
||||
setIsDismissed(true);
|
||||
}, [notificationBanner?.id]);
|
||||
|
||||
useEffect(() => {
|
||||
const localStorageNotificationBanner = getNotificationFromLocalStorage();
|
||||
if (notificationBanner === undefined) {
|
||||
return;
|
||||
}
|
||||
if (localStorageNotificationBanner?.id !== notificationBanner.id) {
|
||||
clearLocalStorageNotificationBanner();
|
||||
setIsDismissed(false);
|
||||
}
|
||||
}, [dismissNotification, notificationBanner?.id]);
|
||||
|
||||
useEffect(() => {
|
||||
const onUnmount = () => {
|
||||
if (notificationBanner?.isSticky === undefined) {
|
||||
return;
|
||||
}
|
||||
if (!notificationBanner.isSticky) {
|
||||
dismissNotification();
|
||||
}
|
||||
};
|
||||
|
||||
return onUnmount;
|
||||
}, [dismissNotification, notificationBanner?.isSticky]);
|
||||
|
||||
return {
|
||||
notificationBanner,
|
||||
dismissNotification,
|
||||
isDismissed,
|
||||
};
|
||||
};
|
1
frontend/app/chat/components/NotificationBanner/index.ts
Normal file
1
frontend/app/chat/components/NotificationBanner/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from "./NotificationBanner";
|
33
frontend/app/chat/components/NotificationBanner/utils.ts
Normal file
33
frontend/app/chat/components/NotificationBanner/utils.ts
Normal file
@ -0,0 +1,33 @@
|
||||
const notificationsLocalStorageKey = "homepage-notifications";
|
||||
|
||||
type LocalStorageNotification = {
|
||||
isDismissed: boolean;
|
||||
id: string;
|
||||
};
|
||||
|
||||
export const getNotificationFromLocalStorage = ():
|
||||
| LocalStorageNotification
|
||||
| undefined => {
|
||||
const notifications = localStorage.getItem(notificationsLocalStorageKey);
|
||||
|
||||
if (notifications !== null) {
|
||||
return JSON.parse(notifications) as LocalStorageNotification;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
};
|
||||
|
||||
export const setNotificationAsDismissedInLocalStorage = (id: string): void => {
|
||||
const notificationPayload: LocalStorageNotification = {
|
||||
isDismissed: true,
|
||||
id,
|
||||
};
|
||||
localStorage.setItem(
|
||||
notificationsLocalStorageKey,
|
||||
JSON.stringify(notificationPayload)
|
||||
);
|
||||
};
|
||||
|
||||
export const clearLocalStorageNotificationBanner = (): void => {
|
||||
localStorage.removeItem(notificationsLocalStorageKey);
|
||||
};
|
@ -1 +1,2 @@
|
||||
export * from "./ChatsList";
|
||||
export * from "./NotificationBanner";
|
||||
|
@ -6,7 +6,7 @@ import { ChatsProvider } from "@/lib/context/ChatsProvider/chats-provider";
|
||||
import { useSupabase } from "@/lib/context/SupabaseProvider";
|
||||
import { redirectToLogin } from "@/lib/router/redirectToLogin";
|
||||
|
||||
import { ChatsList } from "./components/ChatsList";
|
||||
import { ChatsList, NotificationBanner } from "./components";
|
||||
|
||||
interface LayoutProps {
|
||||
children?: ReactNode;
|
||||
@ -23,6 +23,7 @@ const Layout = ({ children }: LayoutProps): JSX.Element => {
|
||||
<KnowledgeToFeedProvider>
|
||||
<ChatsProvider>
|
||||
<ChatProvider>
|
||||
<NotificationBanner />
|
||||
<div className="relative h-full w-full flex justify-stretch items-stretch">
|
||||
<ChatsList />
|
||||
{children}
|
||||
|
@ -36,7 +36,7 @@ const RootLayout = async ({
|
||||
return (
|
||||
<html lang="en">
|
||||
<body
|
||||
className={`bg-white text-black min-h-screen flex flex-col dark:bg-black dark:text-white w-full ${inter.className}`}
|
||||
className={`bg-white text-black h-screen flex flex-col dark:bg-black dark:text-white w-full ${inter.className}`}
|
||||
>
|
||||
<FeatureFlagsProvider>
|
||||
<ToastProvider>
|
||||
|
@ -84,7 +84,6 @@ const UserPage = (): JSX.Element => {
|
||||
<ApiKeyConfig />
|
||||
</CardBody>
|
||||
</Card>
|
||||
L
|
||||
</main>
|
||||
</>
|
||||
);
|
||||
|
@ -2,3 +2,4 @@ export const TESTIMONIALS_DATA_KEY = "testimonials";
|
||||
export const USE_CASES_DATA_KEY = "useCases";
|
||||
export const DEMO_VIDEO_DATA_KEY = "demoVideo";
|
||||
export const SECURITY_QUESTIONS_DATA_KEY = "securityQuestions";
|
||||
export const NOTIFICATION_BANNER_DATA_KEY = "notificationBanner";
|
||||
|
@ -2,10 +2,11 @@ import axios from "axios";
|
||||
|
||||
import { DEFAULT_CMS_URL } from "@/lib/config/CONSTANTS";
|
||||
|
||||
import { getDemoVideoUrl } from "./demoVideo";
|
||||
import { getSecurityQuestions } from "./securityQuestion";
|
||||
import { getTestimonials } from "./testimonials";
|
||||
import { getUseCases } from "./useCases";
|
||||
import { getDemoVideoUrl } from "./utils/demoVideo";
|
||||
import { getNotificationBanner } from "./utils/notificationBanner";
|
||||
import { getSecurityQuestions } from "./utils/securityQuestion";
|
||||
import { getTestimonials } from "./utils/testimonials";
|
||||
import { getUseCases } from "./utils/useCases";
|
||||
|
||||
const axiosInstance = axios.create({
|
||||
baseURL: `${process.env.NEXT_PUBLIC_CMS_URL ?? DEFAULT_CMS_URL}`,
|
||||
@ -18,5 +19,6 @@ export const useCmsApi = () => {
|
||||
getUseCases: () => getUseCases(axiosInstance),
|
||||
getDemoVideoUrl: () => getDemoVideoUrl(axiosInstance),
|
||||
getSecurityQuestions: () => getSecurityQuestions(axiosInstance),
|
||||
getNotificationBanner: () => getNotificationBanner(axiosInstance),
|
||||
};
|
||||
};
|
||||
|
35
frontend/lib/api/cms/utils/notificationBanner.ts
Normal file
35
frontend/lib/api/cms/utils/notificationBanner.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import { AxiosInstance } from "axios";
|
||||
|
||||
import { NotificationBanner } from "@/lib/types/NotificationBanner";
|
||||
|
||||
type CmsNotificationBanner = {
|
||||
data: {
|
||||
attributes: {
|
||||
text: string;
|
||||
notification_id: string;
|
||||
style?: Record<string, string>;
|
||||
dismissible?: boolean;
|
||||
isSticky?: boolean;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
const mapCmsNotificationBannerToNotificationBanner = (
|
||||
cmsNotificationBanner: CmsNotificationBanner
|
||||
): NotificationBanner => ({
|
||||
text: cmsNotificationBanner.data.attributes.text,
|
||||
id: cmsNotificationBanner.data.attributes.notification_id,
|
||||
style: cmsNotificationBanner.data.attributes.style,
|
||||
dismissible: cmsNotificationBanner.data.attributes.dismissible,
|
||||
isSticky: cmsNotificationBanner.data.attributes.isSticky,
|
||||
});
|
||||
|
||||
export const getNotificationBanner = async (
|
||||
axiosInstance: AxiosInstance
|
||||
): Promise<NotificationBanner> => {
|
||||
const response = await axiosInstance.get<CmsNotificationBanner>(
|
||||
"/api/notification-banner"
|
||||
);
|
||||
|
||||
return mapCmsNotificationBannerToNotificationBanner(response.data);
|
||||
};
|
@ -42,7 +42,7 @@ export const Sidebar = ({
|
||||
setOpen(false);
|
||||
}
|
||||
}}
|
||||
className="flex flex-col fixed sm:sticky top-0 left-0 h-fill-available overflow-visible z-30 border-r border-black/10 dark:border-white/25 bg-white dark:bg-black"
|
||||
className="flex flex-col fixed sm:sticky top-0 left-0 h-full overflow-visible z-30 border-r border-black/10 dark:border-white/25 bg-white dark:bg-black"
|
||||
>
|
||||
{!open && (
|
||||
<button
|
||||
|
9
frontend/lib/types/NotificationBanner.ts
Normal file
9
frontend/lib/types/NotificationBanner.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { HTMLAttributes } from "react";
|
||||
|
||||
export type NotificationBanner = {
|
||||
id: string;
|
||||
text: string;
|
||||
style?: HTMLAttributes<HTMLDivElement>["style"];
|
||||
dismissible?: boolean;
|
||||
isSticky?: boolean;
|
||||
};
|
@ -79,6 +79,7 @@
|
||||
"react-markdown": "^8.0.7",
|
||||
"react-use": "^17.4.0",
|
||||
"rehype-highlight": "^6.0.0",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"sharp": "^0.32.4",
|
||||
"tailwind-merge": "^1.12.0",
|
||||
"tailwindcss": "3.3.2",
|
||||
|
@ -2475,6 +2475,13 @@
|
||||
dependencies:
|
||||
"@types/unist" "^2"
|
||||
|
||||
"@types/hast@^3.0.0":
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.2.tgz#e6c1126a33955cb9493a5074ddf1873fb48248c7"
|
||||
integrity sha512-B5hZHgHsXvfCoO3xgNJvBnX7N8p86TqQeGKXcokW4XXi+qY4vxxPSFYofytvVmpFxzPv7oxDQzjg5Un5m2/xiw==
|
||||
dependencies:
|
||||
"@types/unist" "*"
|
||||
|
||||
"@types/js-cookie@^2.2.6":
|
||||
version "2.2.7"
|
||||
resolved "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz"
|
||||
@ -2502,6 +2509,13 @@
|
||||
dependencies:
|
||||
"@types/unist" "^2"
|
||||
|
||||
"@types/mdast@^4.0.0":
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.2.tgz#4695661024ffbd9e52cf71e05c69a1f08c0792f6"
|
||||
integrity sha512-tYR83EignvhYO9iU3kDg8V28M0jqyh9zzp5GV+EO+AYnyUl3P5ltkTeJuTiFZQFz670FSb3EwT/6LQdX+UdKfw==
|
||||
dependencies:
|
||||
"@types/unist" "*"
|
||||
|
||||
"@types/ms@*":
|
||||
version "0.7.31"
|
||||
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
|
||||
@ -2565,6 +2579,11 @@
|
||||
resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz"
|
||||
integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
|
||||
|
||||
"@types/unist@*", "@types/unist@^3.0.0":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.1.tgz#778652d02ddec1bfc9e5e938fec8d407b8e56cba"
|
||||
integrity sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==
|
||||
|
||||
"@types/unist@^2", "@types/unist@^2.0.0":
|
||||
version "2.0.7"
|
||||
resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz"
|
||||
@ -2661,6 +2680,11 @@
|
||||
"@typescript-eslint/types" "5.62.0"
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@ungap/structured-clone@^1.0.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
|
||||
integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
|
||||
|
||||
"@vercel/analytics@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.0.1.tgz"
|
||||
@ -3620,6 +3644,13 @@ detect-node-es@^1.1.0:
|
||||
resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz"
|
||||
integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
|
||||
|
||||
devlop@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018"
|
||||
integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==
|
||||
dependencies:
|
||||
dequal "^2.0.0"
|
||||
|
||||
didyoumean@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz"
|
||||
@ -4612,6 +4643,20 @@ has@^1.0.3:
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
hast-util-from-parse5@^8.0.0:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651"
|
||||
integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/unist" "^3.0.0"
|
||||
devlop "^1.0.0"
|
||||
hastscript "^8.0.0"
|
||||
property-information "^6.0.0"
|
||||
vfile "^6.0.0"
|
||||
vfile-location "^5.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
|
||||
hast-util-is-element@^2.0.0:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz"
|
||||
@ -4620,6 +4665,45 @@ hast-util-is-element@^2.0.0:
|
||||
"@types/hast" "^2.0.0"
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
hast-util-parse-selector@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27"
|
||||
integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
|
||||
hast-util-raw@^9.0.0:
|
||||
version "9.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.0.1.tgz#2ba8510e4ed2a1e541cde2a4ebb5c38ab4c82c2d"
|
||||
integrity sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/unist" "^3.0.0"
|
||||
"@ungap/structured-clone" "^1.0.0"
|
||||
hast-util-from-parse5 "^8.0.0"
|
||||
hast-util-to-parse5 "^8.0.0"
|
||||
html-void-elements "^3.0.0"
|
||||
mdast-util-to-hast "^13.0.0"
|
||||
parse5 "^7.0.0"
|
||||
unist-util-position "^5.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
vfile "^6.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
zwitch "^2.0.0"
|
||||
|
||||
hast-util-to-parse5@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed"
|
||||
integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
devlop "^1.0.0"
|
||||
property-information "^6.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
zwitch "^2.0.0"
|
||||
|
||||
hast-util-to-text@^3.0.0:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz"
|
||||
@ -4635,6 +4719,17 @@ hast-util-whitespace@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557"
|
||||
integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==
|
||||
|
||||
hastscript@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a"
|
||||
integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
hast-util-parse-selector "^4.0.0"
|
||||
property-information "^6.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
|
||||
highlight.js@~11.8.0:
|
||||
version "11.8.0"
|
||||
resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz"
|
||||
@ -4661,6 +4756,11 @@ html-parse-stringify@^3.0.1:
|
||||
dependencies:
|
||||
void-elements "3.1.0"
|
||||
|
||||
html-void-elements@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7"
|
||||
integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==
|
||||
|
||||
http-proxy-agent@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz"
|
||||
@ -5362,6 +5462,20 @@ mdast-util-to-hast@^12.1.0:
|
||||
unist-util-position "^4.0.0"
|
||||
unist-util-visit "^4.0.0"
|
||||
|
||||
mdast-util-to-hast@^13.0.0:
|
||||
version "13.0.2"
|
||||
resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz#74c0a9f014bb2340cae6118f6fccd75467792be7"
|
||||
integrity sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/mdast" "^4.0.0"
|
||||
"@ungap/structured-clone" "^1.0.0"
|
||||
devlop "^1.0.0"
|
||||
micromark-util-sanitize-uri "^2.0.0"
|
||||
trim-lines "^3.0.0"
|
||||
unist-util-position "^5.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
|
||||
mdast-util-to-string@^3.1.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789"
|
||||
@ -5461,6 +5575,14 @@ micromark-util-character@^1.0.0:
|
||||
micromark-util-symbol "^1.0.0"
|
||||
micromark-util-types "^1.0.0"
|
||||
|
||||
micromark-util-character@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.0.1.tgz#52b824c2e2633b6fb33399d2ec78ee2a90d6b298"
|
||||
integrity sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==
|
||||
dependencies:
|
||||
micromark-util-symbol "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-util-chunked@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b"
|
||||
@ -5507,6 +5629,11 @@ micromark-util-encode@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5"
|
||||
integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==
|
||||
|
||||
micromark-util-encode@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1"
|
||||
integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==
|
||||
|
||||
micromark-util-html-tag-name@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588"
|
||||
@ -5535,6 +5662,15 @@ micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0:
|
||||
micromark-util-encode "^1.0.0"
|
||||
micromark-util-symbol "^1.0.0"
|
||||
|
||||
micromark-util-sanitize-uri@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de"
|
||||
integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==
|
||||
dependencies:
|
||||
micromark-util-character "^2.0.0"
|
||||
micromark-util-encode "^2.0.0"
|
||||
micromark-util-symbol "^2.0.0"
|
||||
|
||||
micromark-util-subtokenize@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1"
|
||||
@ -5550,11 +5686,21 @@ micromark-util-symbol@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142"
|
||||
integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==
|
||||
|
||||
micromark-util-symbol@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044"
|
||||
integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==
|
||||
|
||||
micromark-util-types@^1.0.0, micromark-util-types@^1.0.1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283"
|
||||
integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==
|
||||
|
||||
micromark-util-types@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e"
|
||||
integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==
|
||||
|
||||
micromark@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9"
|
||||
@ -6005,7 +6151,7 @@ parse-json@^5.0.0:
|
||||
json-parse-even-better-errors "^2.3.0"
|
||||
lines-and-columns "^1.1.6"
|
||||
|
||||
parse5@^7.1.2:
|
||||
parse5@^7.0.0, parse5@^7.1.2:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz"
|
||||
integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
|
||||
@ -6519,6 +6665,15 @@ rehype-highlight@^6.0.0:
|
||||
unified "^10.0.0"
|
||||
unist-util-visit "^4.0.0"
|
||||
|
||||
rehype-raw@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4"
|
||||
integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
hast-util-raw "^9.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
remark-parse@^10.0.0:
|
||||
version "10.0.2"
|
||||
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262"
|
||||
@ -7421,6 +7576,13 @@ unist-util-is@^5.0.0:
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
unist-util-is@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424"
|
||||
integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
|
||||
unist-util-position@^4.0.0:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037"
|
||||
@ -7428,6 +7590,13 @@ unist-util-position@^4.0.0:
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
unist-util-position@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4"
|
||||
integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
|
||||
unist-util-stringify-position@^3.0.0:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz"
|
||||
@ -7435,6 +7604,13 @@ unist-util-stringify-position@^3.0.0:
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
unist-util-stringify-position@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2"
|
||||
integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
|
||||
unist-util-visit-parents@^5.1.1:
|
||||
version "5.1.3"
|
||||
resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz"
|
||||
@ -7443,6 +7619,14 @@ unist-util-visit-parents@^5.1.1:
|
||||
"@types/unist" "^2.0.0"
|
||||
unist-util-is "^5.0.0"
|
||||
|
||||
unist-util-visit-parents@^6.0.0:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815"
|
||||
integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
unist-util-is "^6.0.0"
|
||||
|
||||
unist-util-visit@^4.0.0:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz"
|
||||
@ -7452,6 +7636,15 @@ unist-util-visit@^4.0.0:
|
||||
unist-util-is "^5.0.0"
|
||||
unist-util-visit-parents "^5.1.1"
|
||||
|
||||
unist-util-visit@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6"
|
||||
integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
unist-util-is "^6.0.0"
|
||||
unist-util-visit-parents "^6.0.0"
|
||||
|
||||
universalify@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz"
|
||||
@ -7522,6 +7715,14 @@ uvu@^0.5.0:
|
||||
kleur "^4.0.3"
|
||||
sade "^1.7.3"
|
||||
|
||||
vfile-location@^5.0.0:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.2.tgz#220d9ca1ab6f8b2504a4db398f7ebc149f9cb464"
|
||||
integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
vfile-message@^3.0.0:
|
||||
version "3.1.4"
|
||||
resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz"
|
||||
@ -7530,6 +7731,14 @@ vfile-message@^3.0.0:
|
||||
"@types/unist" "^2.0.0"
|
||||
unist-util-stringify-position "^3.0.0"
|
||||
|
||||
vfile-message@^4.0.0:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181"
|
||||
integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
unist-util-stringify-position "^4.0.0"
|
||||
|
||||
vfile@^5.0.0:
|
||||
version "5.3.7"
|
||||
resolved "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz"
|
||||
@ -7540,6 +7749,15 @@ vfile@^5.0.0:
|
||||
unist-util-stringify-position "^3.0.0"
|
||||
vfile-message "^3.0.0"
|
||||
|
||||
vfile@^6.0.0:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.1.tgz#1e8327f41eac91947d4fe9d237a2dd9209762536"
|
||||
integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
unist-util-stringify-position "^4.0.0"
|
||||
vfile-message "^4.0.0"
|
||||
|
||||
victory-area@^36.6.11:
|
||||
version "36.6.11"
|
||||
resolved "https://registry.npmjs.org/victory-area/-/victory-area-36.6.11.tgz"
|
||||
@ -7946,6 +8164,11 @@ watchpack@2.4.0:
|
||||
glob-to-regexp "^0.4.1"
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
web-namespaces@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
|
||||
integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
|
||||
|
||||
webidl-conversions@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
|
||||
@ -8107,3 +8330,8 @@ zod@3.21.4:
|
||||
version "3.21.4"
|
||||
resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
|
||||
integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==
|
||||
|
||||
zwitch@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
|
||||
integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==
|
||||
|
Loading…
Reference in New Issue
Block a user