mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-06-30 07:36:38 -04:00
React 18 (#863)
* gymnastics to make theme script work with react 18 hydration * try next 12.1.3 canary to fix SSG head tags? * revert theme script changes * next 12.1.3-canary.3 * double-revert some of the use-theme.tsx changes * separate theme restoration script & move to _document * bump next * bump next (again) * clean up some theme stuff * use hashed image URLs in webmanifest and feeds * text experimental react config * Update ThemeScript.tsx * switch selfie image to `layout="raw"` * use `layout="raw"` for all non-imported images * revert raw images in some places, messes up responsiveness * fix nitpicky "no divs inside buttons" html validation error * fix react-player hydration errors * fix hydration errors from server/client time zone differences * clean up hydration fixes * Update format-date.ts * last-minute cleanup
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { forwardRef, useState, useEffect } from "react";
|
||||
import copy from "copy-to-clipboard";
|
||||
import innerText from "react-innertext";
|
||||
import copy from "copy-to-clipboard";
|
||||
import { ClipboardOcticon, CheckOcticon } from "../Icons";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import type { ReactNode, Ref } from "react";
|
||||
|
@ -1,5 +1,5 @@
|
||||
import Image, { CustomImageProps } from "../Image";
|
||||
import innerText from "react-innertext";
|
||||
import Image, { CustomImageProps } from "../Image";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import type { PropsWithChildren } from "react";
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import useSWR from "swr";
|
||||
import Loading from "../Loading";
|
||||
import { fetcher } from "../../lib/helpers/fetcher";
|
||||
import { siteLocale } from "../../lib/config";
|
||||
|
||||
export type HitCounterProps = {
|
||||
slug: string;
|
||||
@ -27,8 +28,11 @@ const HitCounter = ({ slug, className }: HitCounterProps) => {
|
||||
|
||||
// we have data!
|
||||
return (
|
||||
<span title={`${data.hits.toLocaleString("en-US")} ${data.hits === 1 ? "view" : "views"}`} className={className}>
|
||||
{data.hits.toLocaleString("en-US")}
|
||||
<span
|
||||
title={`${data.hits.toLocaleString(siteLocale)} ${data.hits === 1 ? "view" : "views"}`}
|
||||
className={className}
|
||||
>
|
||||
{data.hits.toLocaleString(siteLocale)}
|
||||
</span>
|
||||
);
|
||||
} catch (error) {
|
||||
|
@ -36,8 +36,8 @@ const CustomImage = ({
|
||||
}: CustomImageProps) => {
|
||||
// passed directly into next/image: https://nextjs.org/docs/api-reference/next/image
|
||||
const imageProps: Partial<NextImageProps> = {
|
||||
width: typeof width === "string" ? Number.parseInt(width) : width,
|
||||
height: typeof height === "string" ? Number.parseInt(height) : height,
|
||||
width: typeof width === "string" ? Number.parseInt(width.replace("px", "")) : width,
|
||||
height: typeof height === "string" ? Number.parseInt(height.replace("px", "")) : height,
|
||||
alt: alt || "",
|
||||
layout: layout || "intrinsic",
|
||||
quality: quality || 65,
|
||||
|
@ -2,7 +2,8 @@ import Head from "next/head";
|
||||
import Header from "../Header";
|
||||
import Footer from "../Footer";
|
||||
import { useTheme } from "../../hooks/use-theme";
|
||||
import { styled, theme, darkTheme } from "../../lib/styles/stitches.config";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import { themeColors } from "../../lib/styles/helpers/themes";
|
||||
import type { ComponentProps } from "react";
|
||||
|
||||
const Flex = styled("div", {
|
||||
@ -39,10 +40,7 @@ const Layout = ({ container = true, stickyHeader = true, children, ...rest }: La
|
||||
<>
|
||||
<Head>
|
||||
{/* dynamically set browser theme color to match the background color; default to light for SSR */}
|
||||
<meta
|
||||
name="theme-color"
|
||||
content={(resolvedTheme === "dark" ? darkTheme : theme).colors.backgroundOuter?.value}
|
||||
/>
|
||||
<meta name="theme-color" content={themeColors[resolvedTheme === "dark" ? "dark" : "light"]} />
|
||||
</Head>
|
||||
|
||||
<Flex {...rest}>
|
||||
|
@ -1,8 +1,8 @@
|
||||
import Link from "next/link";
|
||||
import { format } from "date-fns";
|
||||
import HitCounter from "../HitCounter";
|
||||
import NoteTitle from "../NoteTitle";
|
||||
import { DateIcon, TagIcon, EditIcon, ViewsIcon } from "../Icons";
|
||||
import { formatDateTZ } from "../../lib/helpers/format-date";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import * as config from "../../lib/config";
|
||||
import type { NoteType } from "../../types";
|
||||
@ -66,7 +66,7 @@ const NoteMeta = ({ slug, date, title, htmlTitle, tags = [] }: NoteMetaProps) =>
|
||||
<span>
|
||||
<Icon as={DateIcon} />
|
||||
</span>
|
||||
<span title={format(new Date(date), "PPppp")}>{format(new Date(date), "MMMM d, yyyy")}</span>
|
||||
<span title={formatDateTZ(date)}>{formatDateTZ(date, "MMMM d, yyyy")}</span>
|
||||
</MetaLink>
|
||||
</Link>
|
||||
</MetaItem>
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { format } from "date-fns";
|
||||
import Link from "../Link";
|
||||
import { formatDateTZ } from "../../lib/helpers/format-date";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import type { NoteType } from "../../types";
|
||||
|
||||
@ -67,7 +67,7 @@ const NotesList = ({ notesByYear }: NotesListProps) => {
|
||||
<List>
|
||||
{notes.map(({ slug, date, htmlTitle }) => (
|
||||
<Post key={slug}>
|
||||
<PostDate>{format(new Date(date), "MMM d")}</PostDate>
|
||||
<PostDate title={formatDateTZ(date)}>{formatDateTZ(date, "MMM d")}</PostDate>
|
||||
<span>
|
||||
<Link
|
||||
href={{
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { intlFormat, formatDistanceToNowStrict } from "date-fns";
|
||||
import Link from "../Link";
|
||||
import { StarOcticon, ForkOcticon } from "../Icons";
|
||||
import { useHasMounted } from "../../hooks/use-has-mounted";
|
||||
import { formatDateTZ, formatTimeAgo } from "../../lib/helpers/format-date";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import { siteLocale } from "../../lib/config";
|
||||
import type { RepositoryType } from "../../types";
|
||||
|
||||
const Wrapper = styled("div", {
|
||||
@ -80,68 +82,58 @@ const RepositoryCard = ({
|
||||
forks,
|
||||
updatedAt,
|
||||
className,
|
||||
}: RepositoryCardProps) => (
|
||||
<Wrapper className={className}>
|
||||
<Name href={url}>{name}</Name>
|
||||
}: RepositoryCardProps) => {
|
||||
const hasMounted = useHasMounted();
|
||||
|
||||
{description && <Description>{description}</Description>}
|
||||
return (
|
||||
<Wrapper className={className}>
|
||||
<Name href={url}>{name}</Name>
|
||||
|
||||
<Meta>
|
||||
{language && (
|
||||
<MetaItem>
|
||||
<LanguageCircle css={{ backgroundColor: language.color }} />
|
||||
<span>{language.name}</span>
|
||||
</MetaItem>
|
||||
)}
|
||||
{description && <Description>{description}</Description>}
|
||||
|
||||
{stars > 0 && (
|
||||
<MetaItem>
|
||||
<MetaLink
|
||||
href={`${url}/stargazers`}
|
||||
title={`${stars.toLocaleString("en-US")} ${stars === 1 ? "star" : "stars"}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<MetaIcon as={StarOcticon} />
|
||||
<span>{stars.toLocaleString("en-US")}</span>
|
||||
</MetaLink>
|
||||
</MetaItem>
|
||||
)}
|
||||
|
||||
{forks > 0 && (
|
||||
<MetaItem>
|
||||
<MetaLink
|
||||
href={`${url}/network/members`}
|
||||
title={`${forks.toLocaleString("en-US")} ${forks === 1 ? "fork" : "forks"}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<MetaIcon as={ForkOcticon} />
|
||||
<span>{forks.toLocaleString("en-US")}</span>
|
||||
</MetaLink>
|
||||
</MetaItem>
|
||||
)}
|
||||
|
||||
<MetaItem
|
||||
title={intlFormat(
|
||||
new Date(updatedAt),
|
||||
{
|
||||
year: "numeric",
|
||||
month: "short",
|
||||
day: "numeric",
|
||||
hour: "numeric",
|
||||
minute: "numeric",
|
||||
timeZoneName: "short",
|
||||
},
|
||||
{
|
||||
locale: "en-US",
|
||||
}
|
||||
<Meta>
|
||||
{language && (
|
||||
<MetaItem>
|
||||
<LanguageCircle css={{ backgroundColor: language.color }} />
|
||||
<span>{language.name}</span>
|
||||
</MetaItem>
|
||||
)}
|
||||
>
|
||||
<span>Updated {formatDistanceToNowStrict(new Date(updatedAt), { addSuffix: true })}</span>
|
||||
</MetaItem>
|
||||
</Meta>
|
||||
</Wrapper>
|
||||
);
|
||||
|
||||
{stars > 0 && (
|
||||
<MetaItem>
|
||||
<MetaLink
|
||||
href={`${url}/stargazers`}
|
||||
title={`${stars.toLocaleString(siteLocale)} ${stars === 1 ? "star" : "stars"}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<MetaIcon as={StarOcticon} />
|
||||
<span>{stars.toLocaleString(siteLocale)}</span>
|
||||
</MetaLink>
|
||||
</MetaItem>
|
||||
)}
|
||||
|
||||
{forks > 0 && (
|
||||
<MetaItem>
|
||||
<MetaLink
|
||||
href={`${url}/network/members`}
|
||||
title={`${forks.toLocaleString(siteLocale)} ${forks === 1 ? "fork" : "forks"}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<MetaIcon as={ForkOcticon} />
|
||||
<span>{forks.toLocaleString(siteLocale)}</span>
|
||||
</MetaLink>
|
||||
</MetaItem>
|
||||
)}
|
||||
|
||||
{/* only use relative "time ago" on client side, since it'll be outdated via SSG and cause hydration errors */}
|
||||
<MetaItem title={formatDateTZ(updatedAt)}>
|
||||
<span>Updated {hasMounted ? formatTimeAgo(updatedAt) : `on ${formatDateTZ(updatedAt, "PP")}`}</span>
|
||||
</MetaItem>
|
||||
</Meta>
|
||||
</Wrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default RepositoryCard;
|
||||
|
@ -6,23 +6,16 @@ import type { ComponentProps } from "react";
|
||||
|
||||
import selfieJpg from "../../public/static/images/selfie.jpg";
|
||||
|
||||
const ConstrainImage = styled("div", {
|
||||
const Image = styled(NextImage, {
|
||||
display: "block",
|
||||
width: "50px",
|
||||
height: "50px",
|
||||
lineHeight: 0,
|
||||
padding: 0,
|
||||
|
||||
"@medium": {
|
||||
width: "70px",
|
||||
height: "70px",
|
||||
},
|
||||
});
|
||||
|
||||
const Image = styled(NextImage, {
|
||||
border: "1px solid $light !important",
|
||||
borderRadius: "50%",
|
||||
|
||||
"@medium": {
|
||||
width: "70px",
|
||||
height: "70px",
|
||||
borderWidth: "2px !important",
|
||||
},
|
||||
});
|
||||
@ -60,17 +53,7 @@ export type SelfieProps = ComponentProps<typeof Link>;
|
||||
const Selfie = ({ ...rest }: SelfieProps) => (
|
||||
<NextLink href="/" passHref={true}>
|
||||
<Link {...rest}>
|
||||
<ConstrainImage>
|
||||
<Image
|
||||
src={selfieJpg}
|
||||
alt="Photo of Jake Jarvis"
|
||||
width={70}
|
||||
height={70}
|
||||
quality={60}
|
||||
layout="intrinsic"
|
||||
priority
|
||||
/>
|
||||
</ConstrainImage>
|
||||
<Image src={selfieJpg} alt="Photo of Jake Jarvis" width={50} height={50} quality={60} layout="raw" priority />
|
||||
<Name>Jake Jarvis</Name>
|
||||
</Link>
|
||||
</NextLink>
|
||||
|
62
components/ThemeScript/ThemeScript.tsx
Normal file
62
components/ThemeScript/ThemeScript.tsx
Normal file
@ -0,0 +1,62 @@
|
||||
import { darkModeQuery, themeStorageKey, themeClassNames } from "../../lib/styles/helpers/themes";
|
||||
|
||||
// comments are up here to avoid having them inside the actual client output:
|
||||
// - `p` is the user's saved preference
|
||||
// - `c` is the map of theme -> classname
|
||||
// - `l` is the list of <html>'s current class(es), which the `cn` values are removed to start fresh
|
||||
// - `q` is always the CSS media query for prefers dark mode
|
||||
// - `m` is the listener which tests that media query
|
||||
// - `try/catch` is in case I messed something up here bigly... (will default to light theme)
|
||||
/* eslint-disable no-empty, no-var, one-var */
|
||||
const clientScript = () => {
|
||||
try {
|
||||
var p = localStorage.getItem("__STORAGE_KEY__"),
|
||||
c = "__CLASS_NAMES__",
|
||||
l = document.documentElement.classList;
|
||||
l.remove("__LIST_OF_CLASSES__");
|
||||
|
||||
if (!p || p === "system") {
|
||||
var q = "__MEDIA_QUERY__",
|
||||
m = window.matchMedia(q);
|
||||
m.media !== q || m.matches ? l.add(c["dark"]) : l.add(c["light"]);
|
||||
} else {
|
||||
l.add(c[p]);
|
||||
}
|
||||
} catch (e) {}
|
||||
};
|
||||
/* eslint-enable no-empty, no-var, one-var */
|
||||
|
||||
// since the function above will end up being injected as a plain dumb string, we need to set the dynamic values here:
|
||||
const prepareScript = (script: unknown) => {
|
||||
const functionString = String(script)
|
||||
.replace('"__MEDIA_QUERY__"', `"${darkModeQuery}"`)
|
||||
.replace('"__STORAGE_KEY__"', `"${themeStorageKey}"`)
|
||||
.replace('"__CLASS_NAMES__"', JSON.stringify(themeClassNames))
|
||||
.replace(
|
||||
'"__LIST_OF_CLASSES__"',
|
||||
Object.values(themeClassNames)
|
||||
.map((t: string) => `"${t}"`)
|
||||
.join(",")
|
||||
);
|
||||
// somewhat "minify" the final code by removing tabs/newlines:
|
||||
// https://github.com/sindresorhus/condense-whitespace/blob/main/index.js
|
||||
// .replace(/\s{2,}/gu, "")
|
||||
// .trim();
|
||||
|
||||
// make it an IIFE:
|
||||
return `(${functionString})()`;
|
||||
};
|
||||
|
||||
// the script tag injected manually into `<head>` in _document.tsx.
|
||||
// even though it's the proper method, using next/script with `strategy="beforeInteractive"` still causes flash of
|
||||
// white on load. injecting a normal script tag lets us prioritize setting `<html>` attributes even more.
|
||||
const ThemeScript = () => (
|
||||
<script
|
||||
key="restore-theme"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: prepareScript(clientScript),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
export default ThemeScript;
|
2
components/ThemeScript/index.ts
Normal file
2
components/ThemeScript/index.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export * from "./ThemeScript";
|
||||
export { default } from "./ThemeScript";
|
@ -92,10 +92,10 @@ const ThemeToggle = ({ id = "nav", className }: ThemeToggleProps) => {
|
||||
config: springProperties.springConfig,
|
||||
});
|
||||
|
||||
// render a dummy button until we're fully mounted and self-aware
|
||||
// render a blank div of the same size to avoid layout shifting until we're fully mounted and self-aware
|
||||
if (!hasMounted) {
|
||||
return (
|
||||
<Button aria-hidden={true} disabled={true}>
|
||||
<Button as="div" aria-hidden={true}>
|
||||
<div className={className} />
|
||||
</Button>
|
||||
);
|
||||
|
@ -1,16 +1,17 @@
|
||||
import ReactPlayer from "react-player/file";
|
||||
import { useHasMounted } from "../../hooks/use-has-mounted";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import type { FilePlayerProps } from "react-player/file";
|
||||
|
||||
const Wrapper = styled("div", {
|
||||
position: "relative",
|
||||
paddingTop: "56.25%",
|
||||
});
|
||||
|
||||
"& > div": {
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
},
|
||||
const Player = styled(ReactPlayer, {
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
|
||||
"& video": {
|
||||
borderRadius: "$rounded",
|
||||
@ -30,6 +31,9 @@ export type VideoProps = Partial<FilePlayerProps> & {
|
||||
};
|
||||
|
||||
const Video = ({ src, thumbnail, subs, autoplay, className, ...rest }: VideoProps) => {
|
||||
// fix hydration issues: https://github.com/cookpete/react-player/issues/1428
|
||||
const hasMounted = useHasMounted();
|
||||
|
||||
const url = [
|
||||
src.webm && {
|
||||
src: src.webm,
|
||||
@ -73,15 +77,17 @@ const Video = ({ src, thumbnail, subs, autoplay, className, ...rest }: VideoProp
|
||||
|
||||
return (
|
||||
<Wrapper className={className}>
|
||||
<ReactPlayer
|
||||
width="100%"
|
||||
height="100%"
|
||||
url={url}
|
||||
controls={!autoplay}
|
||||
// @ts-ignore
|
||||
config={config}
|
||||
{...rest}
|
||||
/>
|
||||
{hasMounted && (
|
||||
<Player
|
||||
width="100%"
|
||||
height="100%"
|
||||
url={url}
|
||||
controls={!autoplay}
|
||||
// @ts-ignore
|
||||
config={config}
|
||||
{...rest}
|
||||
/>
|
||||
)}
|
||||
</Wrapper>
|
||||
);
|
||||
};
|
||||
|
@ -1,17 +1,19 @@
|
||||
import ReactPlayer from "react-player/youtube";
|
||||
import { useHasMounted } from "../../hooks/use-has-mounted";
|
||||
import { styled } from "../../lib/styles/stitches.config";
|
||||
import type { YouTubePlayerProps } from "react-player/youtube";
|
||||
|
||||
const Wrapper = styled("div", {
|
||||
position: "relative",
|
||||
paddingTop: "56.25%",
|
||||
});
|
||||
|
||||
"& > div": {
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
},
|
||||
const Player = styled(ReactPlayer, {
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
|
||||
// target both the lazy thumbnail preview *and* the actual YouTube embed
|
||||
"& .react-player__preview, & iframe": {
|
||||
borderRadius: "$rounded",
|
||||
},
|
||||
@ -22,17 +24,24 @@ export type YouTubeEmbedProps = Partial<YouTubePlayerProps> & {
|
||||
className?: string;
|
||||
};
|
||||
|
||||
const YouTubeEmbed = ({ id, className, ...rest }: YouTubeEmbedProps) => (
|
||||
<Wrapper className={className}>
|
||||
<ReactPlayer
|
||||
width="100%"
|
||||
height="100%"
|
||||
url={`https://www.youtube-nocookie.com/watch?v=${id}`}
|
||||
light={`https://i.ytimg.com/vi/${id}/hqdefault.jpg`}
|
||||
controls
|
||||
{...rest}
|
||||
/>
|
||||
</Wrapper>
|
||||
);
|
||||
const YouTubeEmbed = ({ id, className, ...rest }: YouTubeEmbedProps) => {
|
||||
// fix hydration issues: https://github.com/cookpete/react-player/issues/1428
|
||||
const hasMounted = useHasMounted();
|
||||
|
||||
return (
|
||||
<Wrapper className={className}>
|
||||
{hasMounted && (
|
||||
<Player
|
||||
width="100%"
|
||||
height="100%"
|
||||
url={`https://www.youtube-nocookie.com/watch?v=${id}`}
|
||||
light={`https://i.ytimg.com/vi/${id}/hqdefault.jpg`}
|
||||
controls
|
||||
{...rest}
|
||||
/>
|
||||
)}
|
||||
</Wrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default YouTubeEmbed;
|
||||
|
@ -1,33 +1,17 @@
|
||||
// forked & modified from pacocoursey/next-themes as of v0.0.15:
|
||||
// https://github.com/pacocoursey/next-themes/tree/b5c2bad50de2d61ad7b52a9c5cdc801a78507d7a
|
||||
|
||||
import { createContext, useCallback, useContext, useEffect, useState, useRef, memo } from "react";
|
||||
import NextHead from "next/head";
|
||||
import { createContext, useCallback, useContext, useEffect, useState, useRef } from "react";
|
||||
import { darkModeQuery, colorSchemes, themeStorageKey } from "../lib/styles/helpers/themes";
|
||||
import type { PropsWithChildren } from "react";
|
||||
|
||||
// https://web.dev/prefers-color-scheme/#the-prefers-color-scheme-media-query
|
||||
const MEDIA = "(prefers-color-scheme: dark)";
|
||||
|
||||
// default to a simple light or dark binary option
|
||||
const colorSchemes = ["light", "dark"];
|
||||
|
||||
interface AttributeValuesMap {
|
||||
[themeName: string]: string;
|
||||
}
|
||||
|
||||
export interface ThemeProviderProps {
|
||||
/** Mapping of theme name to HTML attribute value. Object where key is the theme name and value is the attribute value */
|
||||
classNames: { [themeName: string]: string };
|
||||
/** List of all available theme names */
|
||||
themes?: string[];
|
||||
/** Whether to indicate to browsers which color scheme is used (dark or light) for built-in UI like inputs and buttons */
|
||||
enableColorScheme?: boolean;
|
||||
/** Key used to store theme setting in localStorage */
|
||||
storageKey?: string;
|
||||
/** Default theme name (for v0.0.12 and lower the default was light). If `enableSystem` is false, the default theme is light */
|
||||
defaultTheme?: string;
|
||||
/** HTML attribute modified based on the active theme. Accepts `class` and `data-*` (meaning any data attribute, `data-mode`, `data-color`, etc.) */
|
||||
attribute?: string | "class";
|
||||
/** Mapping of theme name to HTML attribute value. Object where key is the theme name and value is the attribute value */
|
||||
value?: AttributeValuesMap;
|
||||
}
|
||||
|
||||
export interface UseThemeProps {
|
||||
@ -45,7 +29,7 @@ export interface UseThemeProps {
|
||||
const getTheme = (key: string, fallback?: string) => {
|
||||
if (typeof window === "undefined") return undefined;
|
||||
|
||||
let theme;
|
||||
let theme: string;
|
||||
try {
|
||||
theme = localStorage.getItem(key) || undefined;
|
||||
} catch (e) {} // eslint-disable-line no-empty
|
||||
@ -56,7 +40,7 @@ const getTheme = (key: string, fallback?: string) => {
|
||||
// get the user's prefered theme as set via their OS/browser settings
|
||||
const getSystemTheme = (e?: MediaQueryList) => {
|
||||
if (!e) {
|
||||
e = window.matchMedia(MEDIA);
|
||||
e = window.matchMedia(darkModeQuery);
|
||||
}
|
||||
|
||||
const isDark = e.matches;
|
||||
@ -72,82 +56,15 @@ const ThemeContext = createContext<UseThemeProps>({
|
||||
});
|
||||
export const useTheme = () => useContext(ThemeContext);
|
||||
|
||||
// the script tag injected manually into `<head>` by provider below
|
||||
const ThemeScript = memo(function ThemeScript({
|
||||
storageKey,
|
||||
attribute,
|
||||
defaultTheme,
|
||||
value,
|
||||
attrs,
|
||||
}: {
|
||||
storageKey: string;
|
||||
attribute?: string;
|
||||
defaultTheme: string;
|
||||
value?: AttributeValuesMap;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
attrs: any;
|
||||
}) {
|
||||
const setDocumentVar = (() => {
|
||||
if (attribute === "class") {
|
||||
const removeClasses = `d.remove(${attrs.map((t: string) => `"${t}"`).join(",")})`;
|
||||
|
||||
// `d` is the class list of the `<html>` tag
|
||||
return `var d=document.documentElement.classList;${removeClasses};`;
|
||||
} else {
|
||||
// `d` is the entire document, used to set custom attribute of the `<html>` tag (probably `data-*`)
|
||||
return `var d=document.documentElement;`;
|
||||
}
|
||||
})();
|
||||
|
||||
const updateDOM = (name: string, literal?: boolean) => {
|
||||
name = value?.[name] || name;
|
||||
const val = literal ? name : `"${name}"`;
|
||||
|
||||
// mirrors above logic from setDocumentVar()
|
||||
if (attribute === "class") {
|
||||
return `d.add(${val})`;
|
||||
} else {
|
||||
return `d.setAttribute("${attribute}", ${val})`;
|
||||
}
|
||||
};
|
||||
|
||||
// is the default theme still `system`? (it should be...)
|
||||
const defaultSystem = defaultTheme === "system";
|
||||
|
||||
// even though it's the proper method, using next/script with `strategy="beforeInteractive"` still causes flash of
|
||||
// white on load. injecting a normal script tag lets us prioritize setting `<html>` attributes even more.
|
||||
return (
|
||||
<NextHead>
|
||||
<script
|
||||
key="next-themes-script"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `!function(){try{${setDocumentVar}var e=localStorage.getItem("${storageKey}");${
|
||||
!defaultSystem ? updateDOM(defaultTheme) + ";" : ""
|
||||
}if("system"===e||(!e&&${defaultSystem})){var t="${MEDIA}",m=window.matchMedia(t);m.media!==t||m.matches?${updateDOM(
|
||||
"dark"
|
||||
)}:${updateDOM("light")}}else if(e){${value ? `var x=${JSON.stringify(value)}` : ""}}${updateDOM(
|
||||
value ? "x[e]" : "e",
|
||||
true
|
||||
)}}catch(e){}}()`,
|
||||
}}
|
||||
/>
|
||||
</NextHead>
|
||||
);
|
||||
});
|
||||
|
||||
// provider used once in _app.tsx to wrap entire app
|
||||
export const ThemeProvider = ({
|
||||
enableColorScheme = true,
|
||||
storageKey = "theme",
|
||||
classNames,
|
||||
themes = [...colorSchemes],
|
||||
defaultTheme = "system",
|
||||
attribute = "data-theme",
|
||||
value,
|
||||
enableColorScheme = true,
|
||||
children,
|
||||
}: PropsWithChildren<ThemeProviderProps>) => {
|
||||
const [theme, setThemeState] = useState(() => getTheme(storageKey, defaultTheme));
|
||||
const [resolvedTheme, setResolvedTheme] = useState(() => getTheme(storageKey));
|
||||
const attrs = !value ? themes : Object.values(value);
|
||||
const [theme, setThemeState] = useState(() => getTheme(themeStorageKey, "system"));
|
||||
const [resolvedTheme, setResolvedTheme] = useState(() => getTheme(themeStorageKey));
|
||||
|
||||
const handleMediaQuery = useCallback(
|
||||
(e?) => {
|
||||
@ -163,28 +80,25 @@ export const ThemeProvider = ({
|
||||
mediaListener.current = handleMediaQuery;
|
||||
|
||||
const changeTheme = useCallback((theme, updateStorage = true, updateDOM = true) => {
|
||||
let name = value?.[theme] || theme;
|
||||
let name = classNames?.[theme] || theme;
|
||||
|
||||
if (updateStorage) {
|
||||
try {
|
||||
localStorage.setItem(storageKey, theme);
|
||||
localStorage.setItem(themeStorageKey, theme);
|
||||
} catch (e) {} // eslint-disable-line no-empty
|
||||
}
|
||||
|
||||
if (theme === "system") {
|
||||
const resolved = getSystemTheme();
|
||||
name = value?.[resolved] || resolved;
|
||||
name = classNames?.[resolved] || resolved;
|
||||
}
|
||||
|
||||
if (updateDOM) {
|
||||
// remove all theme classes first to start fresh
|
||||
const all = Object.values(classNames);
|
||||
const d = document.documentElement;
|
||||
|
||||
if (attribute === "class") {
|
||||
d.classList.remove(...attrs);
|
||||
d.classList.add(name);
|
||||
} else {
|
||||
d.setAttribute(attribute, name);
|
||||
}
|
||||
d.classList.remove(...all);
|
||||
d.classList.add(name);
|
||||
}
|
||||
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
@ -193,7 +107,7 @@ export const ThemeProvider = ({
|
||||
const handler = (...args: any) => mediaListener.current(...args);
|
||||
|
||||
// Always listen to System preference
|
||||
const media = window.matchMedia(MEDIA);
|
||||
const media = window.matchMedia(darkModeQuery);
|
||||
|
||||
// Intentionally use deprecated listener methods to support iOS & old browsers
|
||||
media.addListener(handler);
|
||||
@ -213,12 +127,12 @@ export const ThemeProvider = ({
|
||||
// localStorage event handling
|
||||
useEffect(() => {
|
||||
const handleStorage = (e: StorageEvent) => {
|
||||
if (e.key !== storageKey) {
|
||||
if (e.key !== themeStorageKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If default theme set, use it if localstorage === null (happens on local storage manual deletion)
|
||||
const theme = e.newValue || defaultTheme;
|
||||
// use default theme if localstorage === null (happens on local storage manual deletion)
|
||||
const theme = e.newValue || "system";
|
||||
setTheme(theme);
|
||||
};
|
||||
|
||||
@ -253,16 +167,6 @@ export const ThemeProvider = ({
|
||||
setTheme,
|
||||
}}
|
||||
>
|
||||
<ThemeScript
|
||||
{...{
|
||||
storageKey,
|
||||
attribute,
|
||||
value,
|
||||
defaultTheme,
|
||||
attrs,
|
||||
}}
|
||||
/>
|
||||
|
||||
{children}
|
||||
</ThemeContext.Provider>
|
||||
);
|
||||
|
@ -3,7 +3,8 @@ module.exports = {
|
||||
// Site info
|
||||
siteName: "Jake Jarvis",
|
||||
siteDomain: "jarv.is",
|
||||
siteLocale: "en_us",
|
||||
siteLocale: "en-US",
|
||||
timeZone: "America/New_York", // https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
||||
baseUrl:
|
||||
process.env.NEXT_PUBLIC_VERCEL_ENV === "production"
|
||||
? "https://jarv.is"
|
||||
|
@ -1,10 +1,16 @@
|
||||
import * as config from ".";
|
||||
|
||||
// favicons (some used here, some re-exported and used elsewhere)
|
||||
import faviconIco from "../../public/static/favicons/favicon.ico";
|
||||
import faviconPng from "../../public/static/favicons/favicon.png";
|
||||
import appleTouchIconPng from "../../public/static/favicons/apple-touch-icon.png";
|
||||
import chrome512Png from "../../public/static/favicons/android-chrome-512x512.png";
|
||||
import chrome192Png from "../../public/static/favicons/android-chrome-192x192.png";
|
||||
import maskable512Png from "../../public/static/favicons/maskable-512x512.png";
|
||||
import maskable192Png from "../../public/static/favicons/maskable-192x192.png";
|
||||
import meJpg from "../../public/static/images/me.jpg";
|
||||
|
||||
import type { StaticImageData } from "next/image";
|
||||
import type { DefaultSeoProps, SocialProfileJsonLdProps, ArticleJsonLdProps } from "next-seo";
|
||||
|
||||
// Most of this file simply takes the data already defined in ./config.js and translates it into objects that are
|
||||
@ -17,7 +23,7 @@ export const defaultSeo: DefaultSeoProps = {
|
||||
openGraph: {
|
||||
site_name: config.siteName,
|
||||
title: `${config.siteName} – ${config.shortDescription}`,
|
||||
locale: config.siteLocale,
|
||||
locale: config.siteLocale?.replace("-", "_"),
|
||||
type: "website",
|
||||
images: [
|
||||
{
|
||||
@ -126,3 +132,15 @@ export const articleJsonLd: Pick<ArticleJsonLdProps, "authorName" | "publisherNa
|
||||
publisherName: config.siteName,
|
||||
publisherLogo: `${config.baseUrl}${meJpg.src}`,
|
||||
};
|
||||
|
||||
// Re-export icons to use their static image data elsewhere
|
||||
export const favicons: Record<string, StaticImageData> = {
|
||||
faviconIco,
|
||||
faviconPng,
|
||||
appleTouchIconPng,
|
||||
chrome512Png,
|
||||
chrome192Png,
|
||||
maskable512Png,
|
||||
maskable192Png,
|
||||
meJpg,
|
||||
};
|
||||
|
@ -2,6 +2,7 @@ import { Feed } from "feed";
|
||||
import { getAllNotes } from "./parse-notes";
|
||||
import * as config from "../config";
|
||||
import { RELEASE_DATE } from "../config/constants";
|
||||
import { favicons } from "../config/seo";
|
||||
import type { GetServerSidePropsContext, PreviewData } from "next";
|
||||
import type { ParsedUrlQuery } from "querystring";
|
||||
|
||||
@ -22,7 +23,7 @@ export const buildFeed = (
|
||||
description: config.longDescription,
|
||||
copyright: "https://creativecommons.org/licenses/by/4.0/",
|
||||
updated: new Date(RELEASE_DATE),
|
||||
image: `${config.baseUrl}/static/images/me.jpg`,
|
||||
image: `${config.baseUrl}${favicons.meJpg.src}`,
|
||||
feedLinks: {
|
||||
rss: `${config.baseUrl}/feed.xml`,
|
||||
atom: `${config.baseUrl}/feed.atom`,
|
||||
|
15
lib/helpers/format-date.ts
Normal file
15
lib/helpers/format-date.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { formatDistanceToNowStrict } from "date-fns";
|
||||
import { formatInTimeZone } from "date-fns-tz";
|
||||
import enUS from "date-fns/locale/en-US";
|
||||
import { timeZone } from "../config";
|
||||
|
||||
// normalize timezone across the site, both server and client side, to prevent hydration errors.
|
||||
// format defaults to "Apr 4, 2022, 3:04 PM EDT", see https://date-fns.org/v2.28.0/docs/format
|
||||
export const formatDateTZ = (date: string | number | Date, formatStr = "PPp zzz", options = {}) => {
|
||||
return formatInTimeZone(new Date(date), timeZone, formatStr, { locale: enUS, ...options });
|
||||
};
|
||||
|
||||
// returns "5 minutes ago", "1 year ago", etc.
|
||||
export const formatTimeAgo = (date: string | number | Date, options = {}) => {
|
||||
return formatDistanceToNowStrict(new Date(date), { addSuffix: true, locale: enUS, ...options });
|
||||
};
|
22
lib/styles/helpers/themes.ts
Normal file
22
lib/styles/helpers/themes.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { theme, darkTheme } from "../stitches.config";
|
||||
|
||||
// theme classnames are generated dynamically by stitches, so have ThemeProvider pull them from there
|
||||
export const themeClassNames = {
|
||||
light: theme.className,
|
||||
dark: darkTheme.className,
|
||||
};
|
||||
|
||||
// colors used for `<meta name="theme-color" .../>` (see components/Layout/Layout.tsx)
|
||||
export const themeColors = {
|
||||
light: theme.colors.backgroundOuter?.value,
|
||||
dark: darkTheme.colors.backgroundOuter?.value,
|
||||
};
|
||||
|
||||
// default to a simple light or dark binary option
|
||||
export const colorSchemes = ["light", "dark"];
|
||||
|
||||
// https://web.dev/prefers-color-scheme/#the-prefers-color-scheme-media-query
|
||||
export const darkModeQuery = "(prefers-color-scheme: dark)";
|
||||
|
||||
// local storage key
|
||||
export const themeStorageKey = "theme";
|
@ -1,7 +1,7 @@
|
||||
import { createStitches, defaultThemeMap } from "@stitches/react";
|
||||
|
||||
// modified modern-normalize.css in object form:
|
||||
// https://github.com/jakejarvis/stitches-normalize/blob/main/index.js
|
||||
// https://github.com/jakejarvis/stitches-normalize/blob/main/src/index.ts
|
||||
import normalizeCss from "stitches-normalize";
|
||||
|
||||
// web fonts
|
||||
|
@ -33,6 +33,13 @@ module.exports = (phase, { defaultConfig }) => {
|
||||
formats: ["image/avif", "image/webp"],
|
||||
minimumCacheTTL: 43200,
|
||||
},
|
||||
experimental: {
|
||||
reactRoot: true, // 18
|
||||
images: {
|
||||
// allow forgoing the mess of `<span>`s around statically imported images
|
||||
layoutRaw: true,
|
||||
},
|
||||
},
|
||||
webpack: (config) => {
|
||||
// this lets us statically import webfonts like we would images, allowing cool things like preloading them
|
||||
config.module.rules.push({
|
||||
@ -98,6 +105,7 @@ module.exports = (phase, { defaultConfig }) => {
|
||||
],
|
||||
rewrites: async () => [
|
||||
{ source: "/favicon.ico", destination: "/static/favicons/favicon.ico" },
|
||||
{ source: "/favicon.png", destination: "/static/favicons/favicon.png" },
|
||||
{ source: "/apple-touch-icon.png", destination: "/static/favicons/apple-touch-icon.png" },
|
||||
{ source: "/apple-touch-icon-precomposed.png", destination: "/static/favicons/apple-touch-icon.png" },
|
||||
],
|
||||
|
28
package.json
28
package.json
@ -27,12 +27,12 @@
|
||||
"@octokit/graphql": "^4.8.0",
|
||||
"@primer/octicons": "^17.0.0",
|
||||
"@react-spring/web": "^9.4.4",
|
||||
"@sentry/node": "^6.19.3",
|
||||
"@sentry/tracing": "^6.19.3",
|
||||
"@sentry/node": "^6.19.4",
|
||||
"@sentry/tracing": "^6.19.4",
|
||||
"@stitches/react": "^1.2.7",
|
||||
"copy-to-clipboard": "^3.3.1",
|
||||
"date-fns": "^2.28.0",
|
||||
"escape-goat": "^4.0.0",
|
||||
"date-fns-tz": "^1.3.3",
|
||||
"fathom-client": "^3.4.1",
|
||||
"faunadb": "^4.5.4",
|
||||
"feather-icons": "^4.29.0",
|
||||
@ -41,22 +41,22 @@
|
||||
"gray-matter": "^4.0.3",
|
||||
"is-absolute-url": "^4.0.1",
|
||||
"markdown-to-jsx": "^7.1.7",
|
||||
"next": "12.1.2",
|
||||
"next": "12.1.5-canary.2",
|
||||
"next-compose-plugins": "^2.2.1",
|
||||
"next-mdx-remote": "^4.0.2",
|
||||
"next-seo": "^5.3.0",
|
||||
"next-sitemap": "^2.5.17",
|
||||
"next-mdx-remote": "4.0.1",
|
||||
"next-seo": "^5.4.0",
|
||||
"next-sitemap": "^2.5.18",
|
||||
"next-transpile-modules": "^9.0.0",
|
||||
"node-fetch": "^3.2.3",
|
||||
"p-retry": "^5.1.0",
|
||||
"prop-types": "^15.8.1",
|
||||
"query-string": "^7.1.1",
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0",
|
||||
"react-gist": "^1.2.4",
|
||||
"react-innertext": "^1.1.5",
|
||||
"react-intersection-observer": "^8.33.1",
|
||||
"react-is": "17.0.2",
|
||||
"react-is": "18.0.0",
|
||||
"react-player": "^2.10.0",
|
||||
"react-textarea-autosize": "^8.3.3",
|
||||
"react-twitter-embed": "^4.0.4",
|
||||
@ -72,7 +72,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jakejarvis/eslint-config": "*",
|
||||
"@next/bundle-analyzer": "12.1.2",
|
||||
"@next/bundle-analyzer": "12.1.5-canary.2",
|
||||
"@svgr/webpack": "^6.2.1",
|
||||
"@types/node": "*",
|
||||
"@types/prop-types": "^15.7.4",
|
||||
@ -81,11 +81,11 @@
|
||||
"@types/react-is": "^17.0.3",
|
||||
"@types/remove-markdown": "^0.3.1",
|
||||
"@types/sanitize-html": "^2.6.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.17.0",
|
||||
"@typescript-eslint/parser": "^5.17.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.18.0",
|
||||
"@typescript-eslint/parser": "^5.18.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "~8.12.0",
|
||||
"eslint-config-next": "12.1.2",
|
||||
"eslint-config-next": "12.1.5-canary.2",
|
||||
"eslint-config-prettier": "~8.5.0",
|
||||
"eslint-plugin-mdx": "~1.17.0",
|
||||
"eslint-plugin-prettier": "~4.0.0",
|
||||
|
@ -4,9 +4,10 @@ import { DefaultSeo, SocialProfileJsonLd } from "next-seo";
|
||||
import * as Fathom from "fathom-client";
|
||||
import { ThemeProvider } from "../hooks/use-theme";
|
||||
import Layout from "../components/Layout";
|
||||
import { globalStyles, theme, darkTheme } from "../lib/styles/stitches.config";
|
||||
import * as config from "../lib/config";
|
||||
import { defaultSeo, socialProfileJsonLd } from "../lib/config/seo";
|
||||
import { themeClassNames } from "../lib/styles/helpers/themes";
|
||||
import { globalStyles } from "../lib/styles/stitches.config";
|
||||
import type { ReactElement, ReactNode } from "react";
|
||||
import type { NextPage } from "next";
|
||||
import type { AppProps as NextAppProps } from "next/app";
|
||||
@ -55,14 +56,7 @@ const App = ({ Component, pageProps }: AppProps) => {
|
||||
const getLayout = Component.getLayout || ((page) => <Layout>{page}</Layout>);
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
// theme classnames are generated dynamically by stitches, so have ThemeProvider pull them from there
|
||||
attribute="class"
|
||||
value={{
|
||||
light: theme.className,
|
||||
dark: darkTheme.className,
|
||||
}}
|
||||
>
|
||||
<ThemeProvider classNames={themeClassNames}>
|
||||
{/* all SEO config is in ../lib/config/seo.ts except for canonical URLs, which require access to next router */}
|
||||
<DefaultSeo
|
||||
{...defaultSeo}
|
||||
|
@ -1,12 +1,16 @@
|
||||
import { Html, Head, Main, NextScript } from "next/document";
|
||||
import ThemeScript from "../components/ThemeScript/ThemeScript";
|
||||
import { getCssText, fonts } from "../lib/styles/stitches.config";
|
||||
import * as config from "../lib/config";
|
||||
|
||||
// https://nextjs.org/docs/advanced-features/custom-document
|
||||
const Document = () => {
|
||||
return (
|
||||
<Html lang={config.siteLocale?.replace("_", "-")}>
|
||||
<Html lang={config.siteLocale}>
|
||||
<Head>
|
||||
{/* inject a small script to set/restore the user's theme ASAP */}
|
||||
<ThemeScript />
|
||||
|
||||
{/* preload highest priority fonts defined in ../lib/styles/fonts/ */}
|
||||
{fonts.preloadUrls.map((relativeUrl, index) => (
|
||||
<link
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { InView } from "react-intersection-observer";
|
||||
import { NextSeo, ArticleJsonLd } from "next-seo";
|
||||
import { MDXRemote } from "next-mdx-remote";
|
||||
import { htmlEscape } from "escape-goat";
|
||||
import Content from "../../components/Content";
|
||||
import NoteMeta from "../../components/NoteMeta";
|
||||
import Comments from "../../components/Comments";
|
||||
@ -42,8 +41,8 @@ const Note = ({ frontMatter, source }: NoteType) => {
|
||||
/>
|
||||
<ArticleJsonLd
|
||||
url={frontMatter.permalink}
|
||||
title={htmlEscape(frontMatter.title)}
|
||||
description={htmlEscape(frontMatter.description)}
|
||||
title={frontMatter.title}
|
||||
description={frontMatter.description}
|
||||
datePublished={frontMatter.date}
|
||||
dateModified={frontMatter.date}
|
||||
images={frontMatter.image && [`${config.baseUrl}${frontMatter.image}`]}
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { NextSeo } from "next-seo";
|
||||
import { format } from "date-fns";
|
||||
import Content from "../../components/Content";
|
||||
import NotesList, { NotesListProps } from "../../components/NotesList";
|
||||
import { getAllNotes } from "../../lib/helpers/parse-notes";
|
||||
import { formatDateTZ } from "../../lib/helpers/format-date";
|
||||
import type { GetStaticProps } from "next";
|
||||
|
||||
const Notes = ({ notesByYear }: NotesListProps) => (
|
||||
@ -26,7 +26,7 @@ export const getStaticProps: GetStaticProps = async () => {
|
||||
const notesByYear: NotesListProps["notesByYear"] = {};
|
||||
|
||||
getAllNotes().map((note) => {
|
||||
const year = format(new Date(note.date), "yyyy");
|
||||
const year = formatDateTZ(note.date, "yyyy");
|
||||
(notesByYear[year] || (notesByYear[year] = [])).push(note);
|
||||
});
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
import * as config from "../lib/config";
|
||||
import { favicons } from "../lib/config/seo";
|
||||
import type { GetServerSideProps } from "next";
|
||||
|
||||
export const getServerSideProps: GetServerSideProps = async (context) => {
|
||||
@ -8,10 +9,30 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
|
||||
description: config.longDescription,
|
||||
lang: config.siteLocale,
|
||||
icons: [
|
||||
{ src: "/static/favicons/android-chrome-512x512.png", sizes: "512x512", type: "image/png", purpose: "any" },
|
||||
{ src: "/static/favicons/android-chrome-192x192.png", sizes: "192x192", type: "image/png", purpose: "any" },
|
||||
{ src: "/static/favicons/maskable-512x512.png", sizes: "512x512", type: "image/png", purpose: "maskable" },
|
||||
{ src: "/static/favicons/maskable-192x192.png", sizes: "192x192", type: "image/png", purpose: "maskable" },
|
||||
{
|
||||
src: favicons.chrome512Png.src,
|
||||
sizes: `${favicons.chrome512Png.width}x${favicons.chrome512Png.height}`,
|
||||
type: "image/png",
|
||||
purpose: "any",
|
||||
},
|
||||
{
|
||||
src: favicons.chrome192Png.src,
|
||||
sizes: `${favicons.chrome192Png.width}x${favicons.chrome192Png.height}`,
|
||||
type: "image/png",
|
||||
purpose: "any",
|
||||
},
|
||||
{
|
||||
src: favicons.maskable512Png.src,
|
||||
sizes: `${favicons.maskable512Png.width}x${favicons.maskable512Png.height}`,
|
||||
type: "image/png",
|
||||
purpose: "maskable",
|
||||
},
|
||||
{
|
||||
src: favicons.maskable192Png.src,
|
||||
sizes: `${favicons.maskable192Png.width}x${favicons.maskable192Png.height}`,
|
||||
type: "image/png",
|
||||
purpose: "maskable",
|
||||
},
|
||||
],
|
||||
display: "browser",
|
||||
start_url: "/",
|
||||
|
505
yarn.lock
505
yarn.lock
@ -1120,9 +1120,9 @@
|
||||
integrity sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==
|
||||
|
||||
"@mdx-js/mdx@^2.0.0":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.1.0.tgz#a984cee27a378619a82d193288031a7b83a54b26"
|
||||
integrity sha512-AuZGNLSGrytOd7a81E2SsWAOYg/eV5I51BlUPc11PPmPwhpovu7mwfyQ8PH1jxhdH0Is6aRtXHERuDxon0TluQ==
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.1.1.tgz#6d8b9b75456d7685a52c3812b1c3e4830c7458fb"
|
||||
integrity sha512-SXC18cChut3F2zkVXwsb2no0fzTQ1z6swjK13XwFbF5QU/SFQM0orAItPypSdL3GvqYyzVJtz8UofzJhPEQtMw==
|
||||
dependencies:
|
||||
"@types/estree-jsx" "^0.0.1"
|
||||
"@types/mdx" "^2.0.0"
|
||||
@ -1143,9 +1143,9 @@
|
||||
vfile "^5.0.0"
|
||||
|
||||
"@mdx-js/react@^2.0.0":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.1.0.tgz#2aca56d3d9d6f1bbee9f3c44bd26890331419953"
|
||||
integrity sha512-RlPnY2WcVe91pOilf3Rmu1pArKj7gSK03uoaMFKjPWTyh9t6t1VYGSX40twlpChNSPmbcQ29D0xvSBOVMWA6yw==
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.1.1.tgz#c59d844fd61b776fea8673fb77405d4e14db48c5"
|
||||
integrity sha512-7zlZDf5xmWH8I0kFE4DG91COOkxjaW9DX5f1HWztZpFcVua2gJgMYfIkFaDpO/DH/tWi6Mz+OheW4194r15igg==
|
||||
dependencies:
|
||||
"@types/mdx" "^2.0.0"
|
||||
"@types/react" ">=16"
|
||||
@ -1155,84 +1155,84 @@
|
||||
resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b"
|
||||
integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==
|
||||
|
||||
"@next/bundle-analyzer@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-12.1.2.tgz#53e9f3595bd25404479b7a40a85a846b328af12b"
|
||||
integrity sha512-JRDgfEERWXFtwCjiue/SgI/33Z/Dpmt3tKazbf2BIi+uEmxOjuwaN9+TGPEX/P0QWyuhu8DYAex92+B/yB+93Q==
|
||||
"@next/bundle-analyzer@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-12.1.5-canary.2.tgz#0862cde56de524a6d3ab48458c544939e96fd7e3"
|
||||
integrity sha512-phpXYWIgEgApmlO2wbC0z3W12lM3xbQ3WgzSJbCI6L0MJ7OtB4NO1jORlLXKwrUNqkLYQl7X1zQaStDWZjEuWA==
|
||||
dependencies:
|
||||
webpack-bundle-analyzer "4.3.0"
|
||||
|
||||
"@next/env@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.2.tgz#4b0f5fd448ac60b821d2486d2987948e3a099f03"
|
||||
integrity sha512-A/P4ysmFScBFyu1ZV0Mr1Y89snyQhqGwsCrkEpK+itMF+y+pMqBoPVIyakUf4LXqGWJGiGFuIerihvSG70Ad8Q==
|
||||
"@next/env@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.5-canary.2.tgz#574f337cad8236e49661d2dc798c8d27d3ad90fb"
|
||||
integrity sha512-Vnup5ewYgpuUmOjVz8gTQeBF9YYZ2ikVNHOGP6n3YqOYTnqTMKAFvCa7uqkFXraw/PtIbpb9ZMwtXd7T6HWx5Q==
|
||||
|
||||
"@next/eslint-plugin-next@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.2.tgz#5757064bbfaba467c1a5647f0ef25793514f4016"
|
||||
integrity sha512-XqYRh6d98dpv2ynoOEC3VeNv99hxRGBuanRDKASfntdAZD9Zp4n+AugmNF0qwOQEHYgG1uvZW3A4Fi6Y/+kCQw==
|
||||
"@next/eslint-plugin-next@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.5-canary.2.tgz#15f2588682379c92dcc099ceedf1770435ff5c46"
|
||||
integrity sha512-tYFFv4BgvzoRd4U4T9COhVnaznaK6B4GG9xj2W0396EKakczqo0p+1OCYgoBbhqtkOp/nB3ytvncuN2b8VNS6g==
|
||||
dependencies:
|
||||
glob "7.1.7"
|
||||
|
||||
"@next/swc-android-arm-eabi@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.2.tgz#675e952d9032ac7bec02f3f413c17d33bbd90857"
|
||||
integrity sha512-iwalfLBhYmCIlj09czFbovj1SmTycf0AGR8CB357wgmEN8xIuznIwSsCH87AhwQ9apfNtdeDhxvuKmhS9T3FqQ==
|
||||
"@next/swc-android-arm-eabi@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.5-canary.2.tgz#3877f2cb7885047dc59137fd71a7a605927c1b51"
|
||||
integrity sha512-EOeu/MWbTTq1V8I6Ehx1x0AwbGNaPPuWBjT9vB+V0alGA7vsFPyF3AnT81wRUkOCfOkP6MNtYvpr3sjnqxLLOw==
|
||||
|
||||
"@next/swc-android-arm64@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.2.tgz#d9710c50853235f258726b19a649df9c29a49682"
|
||||
integrity sha512-ZoR0Vx7czJhTgRAcFbzTKQc2n2ChC036/uc6PbgYiI/LreEnfmsV/CiREP0pUVs5ndntOX8kBA3BSbh4zCO5tQ==
|
||||
"@next/swc-android-arm64@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.5-canary.2.tgz#acf7a65766f21951cf3b938d119a903c6895a904"
|
||||
integrity sha512-8xSPGDnekQTH6aulQ1fr0yy2zZ+DbuVkvui/D7WtQmfGFVnm1wsxifZDh1HWrrJcxDbdGSF8S/22iUmxMVhKQw==
|
||||
|
||||
"@next/swc-darwin-arm64@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.2.tgz#aadd21b711c82b3efa9b4ecf7665841259e1fa7e"
|
||||
integrity sha512-VXv7lpqFjHwkK65CZHkjvBxlSBTG+l3O0Zl2zHniHj0xHzxJZvR8VFjV2zIMZCYSfVqeQ5yt2rjwuQ9zbpGtXQ==
|
||||
"@next/swc-darwin-arm64@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.5-canary.2.tgz#c27ab156d62b342b258f05e348bde0a7f64dce03"
|
||||
integrity sha512-WgWpb9tkTPBvAJHdLLnwdxlPx2z7bftcD5Z8EARBkJE6Y0eW2J3HG9fVov3SinS074f8PtEiE0xzwnbdtZBLbQ==
|
||||
|
||||
"@next/swc-darwin-x64@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.2.tgz#3b1a389828f5c88ecb828a6394692fdeaf175081"
|
||||
integrity sha512-evXxJQnXEnU+heWyun7d0UV6bhBcmoiyFGR3O3v9qdhGbeXh+SXYVxRO69juuh6V7RWRdlb1KQ0rGUNa1k0XSw==
|
||||
"@next/swc-darwin-x64@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.5-canary.2.tgz#8d6c128dbbb62f2aac3af5366bc4c0531857d375"
|
||||
integrity sha512-uE5nKW5N6Til+i8w07SkGy+f6shwxdLCgrghsf3Aoa6PlrRubTTB7TXkeeZDaiuhxgt2891GvR0LzTwa+peH9w==
|
||||
|
||||
"@next/swc-linux-arm-gnueabihf@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.2.tgz#db4371ca716bf94c94d4f6b001ac3c9d08d97d79"
|
||||
integrity sha512-LJV/wo6R0Ot7Y/20bZs00aBG4J333RT6H/5Q2AROE4Hnx7cenSktSnfU6WCnJgzYLSIHdbLs549LcZMULuVquw==
|
||||
"@next/swc-linux-arm-gnueabihf@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.5-canary.2.tgz#c0c09a47599e05a945409a69efed9c065895a00a"
|
||||
integrity sha512-Vfh4Orqzgtud/5UU2c7FfzmbOylWQYk5xQRN4XfnzHQSVkKwPVEnQnSKFHaon4Amhy5gdbxINFc1vi6lv3bZIA==
|
||||
|
||||
"@next/swc-linux-arm64-gnu@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.2.tgz#0e71db03b8b12ed315c8be7d15392ecefe562b7c"
|
||||
integrity sha512-fjlYU1Y8kVjjRKyuyQBYLHPxjGOS2ox7U8TqAvtgKvd2PxqdsgW4sP+VDovRVPrZlGXNllKoJiqMO1OoR9fB6w==
|
||||
"@next/swc-linux-arm64-gnu@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.5-canary.2.tgz#9e772be26fe7d3e5c50ead44808cbd17c37c0cc7"
|
||||
integrity sha512-EzQOUFDruVVAXNnk8LPd0zEeZdegS70+pDnmheC/Ui4PCAOLpiWlxSzthOqq3NAHcNw+ThmQRZo8KcOg/mWuww==
|
||||
|
||||
"@next/swc-linux-arm64-musl@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.2.tgz#f1b055793da1c12167ed3b6e32aef8289721a1fb"
|
||||
integrity sha512-Y1JRDMHqSjLObjyrD1hf6ePrJcOF/mkw+LbAzoNgrHL1dSuIAqcz3jYunJt8T7Yw48xSJy6LPSL9BclAHwEwOA==
|
||||
"@next/swc-linux-arm64-musl@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.5-canary.2.tgz#11f7170cf0dacec683d09c297e51aa401677ce57"
|
||||
integrity sha512-k6LYVBcpV86erVA+eIgm+rn/PyGXh0d3VEnAnLPheedjlFVbB5qAp2SSxo4zWrgmrGwfyRNLxcDniZiBagI8bA==
|
||||
|
||||
"@next/swc-linux-x64-gnu@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.2.tgz#69764ffaacb3b9b373897fff15d7dd871455efe2"
|
||||
integrity sha512-5N4QSRT60ikQqCU8iHfYZzlhg6MFTLsKhMTARmhn8wLtZfN9VVyTFwZrJQWjV64dZc4JFeXDANGao8fm55y6bw==
|
||||
"@next/swc-linux-x64-gnu@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.5-canary.2.tgz#b5ce502a7280e1eedd6b838fa0d3c059773c053c"
|
||||
integrity sha512-HTX0gIxbBsqA4mGNszbQxhm4T73Z7QkRPqcRPy1gLIm5nspRiTDuv1p1JiewxsbIKsgl+z0u/y0CTM8kFnrqOg==
|
||||
|
||||
"@next/swc-linux-x64-musl@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.2.tgz#0ddaedb5ec578c01771f83be2046dafb2f70df91"
|
||||
integrity sha512-b32F/xAgdYG4Pt0foFzhF+2uhvNxnEj7aJNp1R4EhZotdej2PzvFWcP/dGkc7MJl205pBz5oC3gHyILIIlW6XA==
|
||||
"@next/swc-linux-x64-musl@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.5-canary.2.tgz#d797075956e2ef593bdc767cfd5a9c3f30339fd0"
|
||||
integrity sha512-FuLRotgnYdix+lhFB89RU9C/RFOSpsdZa9h17eMKj+FKFQ44JfGGI14wbbxuJe+F6/52CGvOybpdIfYVkQYBcA==
|
||||
|
||||
"@next/swc-win32-arm64-msvc@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.2.tgz#9e17ed56d5621f8c6961193da3a0b155cea511c9"
|
||||
integrity sha512-hVOcGmWDeVwO00Aclopsj6MoYhfJl5zA4vjAai9KjgclQTFZa/DC0vQjgKAHHKGT5oMHgjiq/G7L6P1/UfwYnw==
|
||||
"@next/swc-win32-arm64-msvc@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.5-canary.2.tgz#82ca30d0e3d10c676e4d57ca8b1b75d22b0ce463"
|
||||
integrity sha512-L9RkZqRweu16jWpJEYLi0yJAe3A+O5qMFv727cLhr6UpEgCl35YTTUm72k47IMr4N3i98Z31JihpaR1nc7TIIA==
|
||||
|
||||
"@next/swc-win32-ia32-msvc@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.2.tgz#ddd260cbe8bc4002fb54415b80baccf37f8db783"
|
||||
integrity sha512-wnVDGIVz2pR3vIkyN6IE+1NvMSBrBj1jba11iR16m8TAPzZH/PrNsxr0a9N5VavEXXLcQpoUVvT+N7nflbRAHg==
|
||||
"@next/swc-win32-ia32-msvc@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.5-canary.2.tgz#d094c84b21165d1bd38c4780544b8a71c138d725"
|
||||
integrity sha512-uQdlN069FoKJbq9vupD4QklLhORJfRUU7UJV7W71JN9nkJJ84ky02FGLS8XNDz70LB2dHIfJyaC7jdikF38Yzw==
|
||||
|
||||
"@next/swc-win32-x64-msvc@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.2.tgz#37412a314bcf4c6006a74e1ef9764048344f3848"
|
||||
integrity sha512-MLNcurEpQp0+7OU9261f7PkN52xTGkfrt4IYTIXau7DO/aHj927oK6piIJdl9EOHdX/KN5W6qlyErj170PSHtw==
|
||||
"@next/swc-win32-x64-msvc@12.1.5-canary.2":
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.5-canary.2.tgz#1a90400e6cd9ff3f2cf87fc4f7243756cc57187e"
|
||||
integrity sha512-4CcjiIgHjYT6otzt5VflWyqmoVKp1HljOxELoBhTROKQ87c6ytqndkQQx4wP2nvWux+biyukUqBGsV0BFOjwaQ==
|
||||
|
||||
"@nodelib/fs.scandir@2.1.5":
|
||||
version "2.1.5"
|
||||
@ -1373,71 +1373,71 @@
|
||||
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.8.tgz#be3e914e84eacf16dbebd311c0d0b44aa1174c64"
|
||||
integrity sha512-ZK5v4bJwgXldAUA8r3q9YKfCwOqoHTK/ZqRjSeRXQrBXWouoPnS4MQtgC4AXGiiBuUu5wxrRgTlv0ktmM4P1Aw==
|
||||
|
||||
"@sentry/core@6.19.3":
|
||||
version "6.19.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.3.tgz#88268afc8c42716c455ad77bb4bed2bbf96abd83"
|
||||
integrity sha512-RcGmYdkrE3VYBMl9Hgv4GKsC8FEVUdWYsfGIcT/btwP2YpBeUaTZl+1vV9r3Ncdl125LqzP5CKSj5otVxiEg6g==
|
||||
"@sentry/core@6.19.4":
|
||||
version "6.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.4.tgz#832d65ae32b4e2a63b9eccd6732b6dd6461620ae"
|
||||
integrity sha512-LIUVqLyt9Ugj6xyQE9itrCmhFs1iQ2FOgVkmpsXu+UVwFY4xccT5k/0PAHa7sik5CeH6x7p8oRCrYgrwbktraQ==
|
||||
dependencies:
|
||||
"@sentry/hub" "6.19.3"
|
||||
"@sentry/minimal" "6.19.3"
|
||||
"@sentry/types" "6.19.3"
|
||||
"@sentry/utils" "6.19.3"
|
||||
"@sentry/hub" "6.19.4"
|
||||
"@sentry/minimal" "6.19.4"
|
||||
"@sentry/types" "6.19.4"
|
||||
"@sentry/utils" "6.19.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/hub@6.19.3":
|
||||
version "6.19.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.3.tgz#d555c83404f19ac9b68f336b051b8e7a9d75feb0"
|
||||
integrity sha512-iYbkrxEZt6CrHP3U3r54MARVZSs3YHjAMUMOTlC16s/Amz1McwV95XtI3NJaqMhwzl7R5vbGrs3xOtLg1V1Uyw==
|
||||
"@sentry/hub@6.19.4":
|
||||
version "6.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.4.tgz#81aeadceddcddc36fb4f5bb40cf6900f79e3e111"
|
||||
integrity sha512-Lc9ZpKk9f8DBFvl7hm4wYvcuuobAee3X+M1eCMQPzYuk4k0mHThPv/d3GJW6Jo1IBxMbM+x3ONuf9myeJ/4H6g==
|
||||
dependencies:
|
||||
"@sentry/types" "6.19.3"
|
||||
"@sentry/utils" "6.19.3"
|
||||
"@sentry/types" "6.19.4"
|
||||
"@sentry/utils" "6.19.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/minimal@6.19.3":
|
||||
version "6.19.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.3.tgz#b9b7f0d7f0cd2341b243318668ac01458f9d7889"
|
||||
integrity sha512-xy/6ThHK8B2NJT98nWrx6V9eVgUbzq2N/8lv5/QqrKsICjxx22TRC8Q6zPg/o7BYcrY5vpugSEbIeErTnyxHDA==
|
||||
"@sentry/minimal@6.19.4":
|
||||
version "6.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.4.tgz#c98e5405eeaac1b4f6b6fdbc36abc3cf2c09a4ac"
|
||||
integrity sha512-23Xwt5XoSEfswTWUJRofqtDU30bz+wzv5VLQlUsA65CD8kEDoajVFco9wnIxbauhb3xaU7+jhbyNHWO75mHnTQ==
|
||||
dependencies:
|
||||
"@sentry/hub" "6.19.3"
|
||||
"@sentry/types" "6.19.3"
|
||||
"@sentry/hub" "6.19.4"
|
||||
"@sentry/types" "6.19.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/node@^6.19.3":
|
||||
version "6.19.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.3.tgz#afcf106bf72acc0e4bbacbc54744de8a938cbd1c"
|
||||
integrity sha512-eHreMMbaK4mMAQ45Ki2xJ6in02l66hL6xhltppy/h4m297JIvjaQAFpbQf5XLtO7W4KjdbSV5qnB45D1aOAzFA==
|
||||
"@sentry/node@^6.19.4":
|
||||
version "6.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.4.tgz#b0c4971e0e416a7b03022eab1bac3f08923bac54"
|
||||
integrity sha512-PP3xXqZq5Mt/f+j6OFHgl9Uu0oXVB9Hw9MK9SDcn7klIRwCBZpA14WA+NLVrEzBxA0baLE5sToeqmxjnCcCfpw==
|
||||
dependencies:
|
||||
"@sentry/core" "6.19.3"
|
||||
"@sentry/hub" "6.19.3"
|
||||
"@sentry/types" "6.19.3"
|
||||
"@sentry/utils" "6.19.3"
|
||||
"@sentry/core" "6.19.4"
|
||||
"@sentry/hub" "6.19.4"
|
||||
"@sentry/types" "6.19.4"
|
||||
"@sentry/utils" "6.19.4"
|
||||
cookie "^0.4.1"
|
||||
https-proxy-agent "^5.0.0"
|
||||
lru_map "^0.3.3"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/tracing@^6.19.3":
|
||||
version "6.19.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.3.tgz#dfdbd5019486c899bdf352b1152d5d253544ef70"
|
||||
integrity sha512-3lyb4yCFH/ltEQSyKM96g2c74vvKIwByx8fLDS4FHYQQDXY+xPcs+zyK8L1Fs5PRFAUciEOK5TS9qwELom5K4w==
|
||||
"@sentry/tracing@^6.19.4":
|
||||
version "6.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.4.tgz#67fb3b331361fbb17d15cd294f2b1cf368f47980"
|
||||
integrity sha512-ngkjX+BgoIPQaydLW+SWh2hAQgCGQZuimd5Hkwkt8GFfckZSTZtYw5X5nFk4U2L06FU8F4BmgnbyxXt5k7IziA==
|
||||
dependencies:
|
||||
"@sentry/hub" "6.19.3"
|
||||
"@sentry/minimal" "6.19.3"
|
||||
"@sentry/types" "6.19.3"
|
||||
"@sentry/utils" "6.19.3"
|
||||
"@sentry/hub" "6.19.4"
|
||||
"@sentry/minimal" "6.19.4"
|
||||
"@sentry/types" "6.19.4"
|
||||
"@sentry/utils" "6.19.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/types@6.19.3":
|
||||
version "6.19.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.3.tgz#94b19da68d4d23561efb1014f72968bcea85cd0c"
|
||||
integrity sha512-jHhqxp8MIWSfOc3krorirTGKTEaSFO6XrAvi+2AZhr6gvOChwOgzgrN2ZqesJcZmgCsqWV21u3usSwYeRrjOJA==
|
||||
"@sentry/types@6.19.4":
|
||||
version "6.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.4.tgz#4e13269daaba2edfeaa4b18a5a14fa8f4d7a85a8"
|
||||
integrity sha512-fzLiQPrjJQ8HgFgA2VqnpLiEOrTJ2ItRY8RY7Cn4038HACoYWYDjrkdVJQBq6IyrxxkgWOSLZXnv85uozBQC+g==
|
||||
|
||||
"@sentry/utils@6.19.3":
|
||||
version "6.19.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.3.tgz#0c3a3f0b86c12e3b079e56e37a44e62a1226043d"
|
||||
integrity sha512-GdC9B/FK7qd0zItY43135bYbhuVSawE18bIrQDNuno8gTpDJ5OgShpTN9zR53AmMh16/lwKNnV3ZZjlpKcxuNw==
|
||||
"@sentry/utils@6.19.4":
|
||||
version "6.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.4.tgz#a104e7e9a21555190da68dbbfb925f887423ef85"
|
||||
integrity sha512-f73K3NCX22KT8CVgIiRaaozIReSX5+LhY7Q4C429DZlfVAgOYw0a+kTFrHTNKGLR4II8M8ECjUsL/6O/BdPSFg==
|
||||
dependencies:
|
||||
"@sentry/types" "6.19.3"
|
||||
"@sentry/types" "6.19.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@stitches/react@^1.2.7":
|
||||
@ -1714,14 +1714,14 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d"
|
||||
integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67"
|
||||
integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ==
|
||||
"@typescript-eslint/eslint-plugin@^5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz#950df411cec65f90d75d6320a03b2c98f6c3af7d"
|
||||
integrity sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "5.17.0"
|
||||
"@typescript-eslint/type-utils" "5.17.0"
|
||||
"@typescript-eslint/utils" "5.17.0"
|
||||
"@typescript-eslint/scope-manager" "5.18.0"
|
||||
"@typescript-eslint/type-utils" "5.18.0"
|
||||
"@typescript-eslint/utils" "5.18.0"
|
||||
debug "^4.3.2"
|
||||
functional-red-black-tree "^1.0.1"
|
||||
ignore "^5.1.8"
|
||||
@ -1739,14 +1739,14 @@
|
||||
"@typescript-eslint/typescript-estree" "5.10.1"
|
||||
debug "^4.3.2"
|
||||
|
||||
"@typescript-eslint/parser@^5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5"
|
||||
integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig==
|
||||
"@typescript-eslint/parser@^5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.18.0.tgz#2bcd4ff21df33621df33e942ccb21cb897f004c6"
|
||||
integrity sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "5.17.0"
|
||||
"@typescript-eslint/types" "5.17.0"
|
||||
"@typescript-eslint/typescript-estree" "5.17.0"
|
||||
"@typescript-eslint/scope-manager" "5.18.0"
|
||||
"@typescript-eslint/types" "5.18.0"
|
||||
"@typescript-eslint/typescript-estree" "5.18.0"
|
||||
debug "^4.3.2"
|
||||
|
||||
"@typescript-eslint/scope-manager@5.10.1":
|
||||
@ -1757,20 +1757,20 @@
|
||||
"@typescript-eslint/types" "5.10.1"
|
||||
"@typescript-eslint/visitor-keys" "5.10.1"
|
||||
|
||||
"@typescript-eslint/scope-manager@5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952"
|
||||
integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==
|
||||
"@typescript-eslint/scope-manager@5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz#a7d7b49b973ba8cebf2a3710eefd457ef2fb5505"
|
||||
integrity sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.17.0"
|
||||
"@typescript-eslint/visitor-keys" "5.17.0"
|
||||
"@typescript-eslint/types" "5.18.0"
|
||||
"@typescript-eslint/visitor-keys" "5.18.0"
|
||||
|
||||
"@typescript-eslint/type-utils@5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672"
|
||||
integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg==
|
||||
"@typescript-eslint/type-utils@5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz#62dbfc8478abf36ba94a90ddf10be3cc8e471c74"
|
||||
integrity sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==
|
||||
dependencies:
|
||||
"@typescript-eslint/utils" "5.17.0"
|
||||
"@typescript-eslint/utils" "5.18.0"
|
||||
debug "^4.3.2"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
@ -1779,10 +1779,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.1.tgz#dca9bd4cb8c067fc85304a31f38ec4766ba2d1ea"
|
||||
integrity sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==
|
||||
|
||||
"@typescript-eslint/types@5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f"
|
||||
integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==
|
||||
"@typescript-eslint/types@5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.18.0.tgz#4f0425d85fdb863071680983853c59a62ce9566e"
|
||||
integrity sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==
|
||||
|
||||
"@typescript-eslint/typescript-estree@5.10.1":
|
||||
version "5.10.1"
|
||||
@ -1797,28 +1797,28 @@
|
||||
semver "^7.3.5"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
"@typescript-eslint/typescript-estree@5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488"
|
||||
integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==
|
||||
"@typescript-eslint/typescript-estree@5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz#6498e5ee69a32e82b6e18689e2f72e4060986474"
|
||||
integrity sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.17.0"
|
||||
"@typescript-eslint/visitor-keys" "5.17.0"
|
||||
"@typescript-eslint/types" "5.18.0"
|
||||
"@typescript-eslint/visitor-keys" "5.18.0"
|
||||
debug "^4.3.2"
|
||||
globby "^11.0.4"
|
||||
is-glob "^4.0.3"
|
||||
semver "^7.3.5"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
"@typescript-eslint/utils@5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306"
|
||||
integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==
|
||||
"@typescript-eslint/utils@5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.18.0.tgz#27fc84cf95c1a96def0aae31684cb43a37e76855"
|
||||
integrity sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==
|
||||
dependencies:
|
||||
"@types/json-schema" "^7.0.9"
|
||||
"@typescript-eslint/scope-manager" "5.17.0"
|
||||
"@typescript-eslint/types" "5.17.0"
|
||||
"@typescript-eslint/typescript-estree" "5.17.0"
|
||||
"@typescript-eslint/scope-manager" "5.18.0"
|
||||
"@typescript-eslint/types" "5.18.0"
|
||||
"@typescript-eslint/typescript-estree" "5.18.0"
|
||||
eslint-scope "^5.1.1"
|
||||
eslint-utils "^3.0.0"
|
||||
|
||||
@ -1830,12 +1830,12 @@
|
||||
"@typescript-eslint/types" "5.10.1"
|
||||
eslint-visitor-keys "^3.0.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128"
|
||||
integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==
|
||||
"@typescript-eslint/visitor-keys@5.18.0":
|
||||
version "5.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz#c7c07709823804171d569017f3b031ced7253e60"
|
||||
integrity sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.17.0"
|
||||
"@typescript-eslint/types" "5.18.0"
|
||||
eslint-visitor-keys "^3.0.0"
|
||||
|
||||
acorn-jsx@^5.0.0, acorn-jsx@^5.3.1:
|
||||
@ -1941,7 +1941,7 @@ aria-query@^4.2.2:
|
||||
"@babel/runtime" "^7.10.2"
|
||||
"@babel/runtime-corejs3" "^7.10.2"
|
||||
|
||||
array-includes@^3.1.3, array-includes@^3.1.4:
|
||||
array-includes@^3.1.4:
|
||||
version "3.1.4"
|
||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
|
||||
integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
|
||||
@ -2125,9 +2125,9 @@ camelcase@^6.2.0:
|
||||
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
|
||||
|
||||
caniuse-lite@^1.0.30001283, caniuse-lite@^1.0.30001317:
|
||||
version "1.0.30001322"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz#2e4c09d11e1e8f852767dab287069a8d0c29d623"
|
||||
integrity sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==
|
||||
version "1.0.30001325"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606"
|
||||
integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==
|
||||
|
||||
ccount@^1.0.0:
|
||||
version "1.1.0"
|
||||
@ -2389,9 +2389,9 @@ css-tree@^1.1.2, css-tree@^1.1.3:
|
||||
source-map "^0.6.1"
|
||||
|
||||
css-what@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.0.1.tgz#3be33be55b9f302f710ba3a9c3abc1e2a63fc7eb"
|
||||
integrity sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA==
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
|
||||
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
|
||||
|
||||
csso@^4.2.0:
|
||||
version "4.2.0"
|
||||
@ -2415,6 +2415,11 @@ data-uri-to-buffer@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b"
|
||||
integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==
|
||||
|
||||
date-fns-tz@^1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.3.tgz#7884a4b3ed6cd95bfd81831d608e5ef8be500c86"
|
||||
integrity sha512-Gks46gwbSauBQnV3Oofluj1wTm8J0tM7sbSJ9P+cJq/ZnTCpMohTKmmO5Tn+jQ7dyn0+b8G7cY4O2DZ5P/LXcA==
|
||||
|
||||
date-fns@^2.28.0:
|
||||
version "2.28.0"
|
||||
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
|
||||
@ -2557,9 +2562,9 @@ eastasianwidth@^0.2.0:
|
||||
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
||||
|
||||
electron-to-chromium@^1.4.84:
|
||||
version "1.4.100"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.100.tgz#da82de8a19a47ea3dcdf141dde85355942fbc4e7"
|
||||
integrity sha512-pNrSE2naf8fizl6/Uxq8UbKb8hU9EiYW4OzCYswosXoLV5NTMOUVKECNzDaHiUubsPq/kAckOzZd7zd8S8CHVw==
|
||||
version "1.4.104"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.104.tgz#60973b0a7d398efa877196e8ccb0c93d48b918d8"
|
||||
integrity sha512-2kjoAyiG7uMyGRM9mx25s3HAzmQG2ayuYXxsFmYugHSDcwxREgLtscZvbL1JcW9S/OemeQ3f/SG6JhDwpnCclQ==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
@ -2636,11 +2641,6 @@ escalade@^3.1.1:
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
escape-goat@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081"
|
||||
integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==
|
||||
|
||||
escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
@ -2656,12 +2656,12 @@ escape-string-regexp@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
|
||||
integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
|
||||
|
||||
eslint-config-next@12.1.2:
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.2.tgz#be3c974598a5697bfde3f8dc19eaa85760bb871a"
|
||||
integrity sha512-nJgSIB5lXoOsS2yY90i5L5ucI1uko+ykhcQkGkydXqs5GdPprY8Y1NKWW3N0OEzQvFyBcf7GHb/ohB21HoeEsg==
|
||||
eslint-config-next@12.1.5-canary.2:
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.5-canary.2.tgz#f6e4da263a527543b62ed368b6277c08eb10445d"
|
||||
integrity sha512-mS1C4hrm+k7L3qjrztwA8kc3kir7VB8uDBeEYSMnd+aMidvgHp+QPP8F04TQsvmRdozOvWoDmbLuUTqLHYUpOA==
|
||||
dependencies:
|
||||
"@next/eslint-plugin-next" "12.1.2"
|
||||
"@next/eslint-plugin-next" "12.1.5-canary.2"
|
||||
"@rushstack/eslint-patch" "1.0.8"
|
||||
"@typescript-eslint/parser" "5.10.1"
|
||||
eslint-import-resolver-node "0.3.4"
|
||||
@ -3251,9 +3251,9 @@ globby@^11.0.4:
|
||||
slash "^3.0.0"
|
||||
|
||||
graceful-fs@^4.2.4:
|
||||
version "4.2.9"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
|
||||
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
|
||||
version "4.2.10"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
|
||||
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
|
||||
|
||||
gray-matter@^4.0.3:
|
||||
version "4.0.3"
|
||||
@ -3595,9 +3595,9 @@ is-negative-zero@^2.0.2:
|
||||
integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
|
||||
|
||||
is-number-object@^1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
|
||||
integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
|
||||
integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
|
||||
dependencies:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
@ -3637,9 +3637,11 @@ is-regex@^1.1.4:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-shared-array-buffer@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
|
||||
integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
|
||||
integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
|
||||
is-stream@^2.0.0:
|
||||
version "2.0.1"
|
||||
@ -3740,11 +3742,11 @@ json5@^2.1.2:
|
||||
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
|
||||
|
||||
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b"
|
||||
integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz#6ab1e52c71dfc0c0707008a91729a9491fe9f76c"
|
||||
integrity sha512-HDAyJ4MNQBboGpUnHAVUNJs6X0lh058s6FuixsFGP7MgJYpD6Vasd6nzSG5iIfXu1zAYlHJ/zsOKNlrenTUBnw==
|
||||
dependencies:
|
||||
array-includes "^3.1.3"
|
||||
array-includes "^3.1.4"
|
||||
object.assign "^4.1.2"
|
||||
|
||||
kind-of@^6.0.0, kind-of@^6.0.2:
|
||||
@ -4603,25 +4605,25 @@ next-compose-plugins@^2.2.1:
|
||||
resolved "https://registry.yarnpkg.com/next-compose-plugins/-/next-compose-plugins-2.2.1.tgz#020fc53f275a7e719d62521bef4300fbb6fde5ab"
|
||||
integrity sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==
|
||||
|
||||
next-mdx-remote@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/next-mdx-remote/-/next-mdx-remote-4.0.2.tgz#56c315819e6704dfb1fe68ce2f5ed0d315c34528"
|
||||
integrity sha512-1cZM2xm+G1FyYodGt92lCXisP0owPeppVHeH5TIaXUGdt6ENBZYOxLNFaVl9fkS9wP/s2sLcC9m2c1iLH2H4rA==
|
||||
next-mdx-remote@4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/next-mdx-remote/-/next-mdx-remote-4.0.1.tgz#9dfdb2198cd139f8691e82912aa8125b5bf74ff1"
|
||||
integrity sha512-voQce8q4uFAArDJYNvpgMcJi9KaWuXpaGKQvaBJGVSzmLGMSBZbM+3F7s8Iflg6o9phn+G0hUUpHKagbRa1BQA==
|
||||
dependencies:
|
||||
"@mdx-js/mdx" "^2.0.0"
|
||||
"@mdx-js/react" "^2.0.0"
|
||||
vfile "^5.3.0"
|
||||
vfile-matter "^3.0.1"
|
||||
|
||||
next-seo@^5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-5.3.0.tgz#35a8c3ebb9898fd2ac4c8208de360feed3756bf8"
|
||||
integrity sha512-ofXUGGZ4l6j4oCxu6aecTWTkNbN/g+zbYUOvLRBKl96bJrt+WWyo4riRxQqqczvk1niGH4ibN7cCEwVjlYZs2g==
|
||||
next-seo@^5.4.0:
|
||||
version "5.4.0"
|
||||
resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-5.4.0.tgz#37a7784b30b3f70cec3fa0d77f9dde5990822d24"
|
||||
integrity sha512-R9DhajPwJnR/lsF2hZ8cN8uqr5CVITsRrCG1AF5+ufcaybKYOvnH8sH9MaH4/hpkps3PQ9H71S7J7SPYixAYzQ==
|
||||
|
||||
next-sitemap@^2.5.17:
|
||||
version "2.5.17"
|
||||
resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-2.5.17.tgz#1d1360a0ae188adb13ae8e3ea47351c4284805fd"
|
||||
integrity sha512-L0zwaqt5WBm8FL/mraA08YbsJD+dnc2gYO1FeawBVUDvFKDXhYXQBTAT2AbkXwCnKinM94/VvBQvw3n8LC9TpA==
|
||||
next-sitemap@^2.5.18:
|
||||
version "2.5.18"
|
||||
resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-2.5.18.tgz#7542df7ad7954d9b5065e28d0a565893f8c1fe43"
|
||||
integrity sha512-zFrlX0oiTA0078jWHY9KPsMfW1dkwHegi9SChUQiJCgJNwDpV/B2JWZQjZYWTRgwIWgBo/qgojKyp503vZYQTg==
|
||||
dependencies:
|
||||
"@corex/deepmerge" "^2.6.148"
|
||||
minimist "^1.2.6"
|
||||
@ -4634,29 +4636,28 @@ next-transpile-modules@^9.0.0:
|
||||
enhanced-resolve "^5.7.0"
|
||||
escalade "^3.1.1"
|
||||
|
||||
next@12.1.2:
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/next/-/next-12.1.2.tgz#c5376a8ae17d3e404a2b691c01f94c8943306f29"
|
||||
integrity sha512-JHPCsnFTBO0Z4SQxSYc611UA1WA+r/3y3Neg66AH5/gSO/oksfRnFw/zGX/FZ9+oOUHS9y3wJFawNpVYR2gJSQ==
|
||||
next@12.1.5-canary.2:
|
||||
version "12.1.5-canary.2"
|
||||
resolved "https://registry.yarnpkg.com/next/-/next-12.1.5-canary.2.tgz#af99fe07100f370c5dc7bb3c4b01b562acb48be7"
|
||||
integrity sha512-ZXsjpFqmdXon8kaK0XsGdctJhuf+ggHNdVjpNN4N5HlT8Rjx4llGqU0hrg+FakjDj3ODEFQASvYcEYQIieFRyA==
|
||||
dependencies:
|
||||
"@next/env" "12.1.2"
|
||||
"@next/env" "12.1.5-canary.2"
|
||||
caniuse-lite "^1.0.30001283"
|
||||
postcss "8.4.5"
|
||||
styled-jsx "5.0.1"
|
||||
use-subscription "1.5.1"
|
||||
optionalDependencies:
|
||||
"@next/swc-android-arm-eabi" "12.1.2"
|
||||
"@next/swc-android-arm64" "12.1.2"
|
||||
"@next/swc-darwin-arm64" "12.1.2"
|
||||
"@next/swc-darwin-x64" "12.1.2"
|
||||
"@next/swc-linux-arm-gnueabihf" "12.1.2"
|
||||
"@next/swc-linux-arm64-gnu" "12.1.2"
|
||||
"@next/swc-linux-arm64-musl" "12.1.2"
|
||||
"@next/swc-linux-x64-gnu" "12.1.2"
|
||||
"@next/swc-linux-x64-musl" "12.1.2"
|
||||
"@next/swc-win32-arm64-msvc" "12.1.2"
|
||||
"@next/swc-win32-ia32-msvc" "12.1.2"
|
||||
"@next/swc-win32-x64-msvc" "12.1.2"
|
||||
"@next/swc-android-arm-eabi" "12.1.5-canary.2"
|
||||
"@next/swc-android-arm64" "12.1.5-canary.2"
|
||||
"@next/swc-darwin-arm64" "12.1.5-canary.2"
|
||||
"@next/swc-darwin-x64" "12.1.5-canary.2"
|
||||
"@next/swc-linux-arm-gnueabihf" "12.1.5-canary.2"
|
||||
"@next/swc-linux-arm64-gnu" "12.1.5-canary.2"
|
||||
"@next/swc-linux-arm64-musl" "12.1.5-canary.2"
|
||||
"@next/swc-linux-x64-gnu" "12.1.5-canary.2"
|
||||
"@next/swc-linux-x64-musl" "12.1.5-canary.2"
|
||||
"@next/swc-win32-arm64-msvc" "12.1.5-canary.2"
|
||||
"@next/swc-win32-ia32-msvc" "12.1.5-canary.2"
|
||||
"@next/swc-win32-x64-msvc" "12.1.5-canary.2"
|
||||
|
||||
node-abort-controller@^3.0.1:
|
||||
version "3.0.1"
|
||||
@ -5013,14 +5014,13 @@ queue-microtask@^1.2.2:
|
||||
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
|
||||
|
||||
react-dom@17.0.2:
|
||||
version "17.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
|
||||
integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
|
||||
react-dom@18.0.0:
|
||||
version "18.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.0.0.tgz#26b88534f8f1dbb80853e1eabe752f24100d8023"
|
||||
integrity sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
scheduler "^0.20.2"
|
||||
scheduler "^0.21.0"
|
||||
|
||||
react-fast-compare@^2.0.1:
|
||||
version "2.0.4"
|
||||
@ -5047,10 +5047,10 @@ react-intersection-observer@^8.33.1:
|
||||
resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-8.33.1.tgz#8e6442cac7052ed63056e191b7539e423e7d5c64"
|
||||
integrity sha512-3v+qaJvp3D1MlGHyM+KISVg/CMhPiOlO6FgPHcluqHkx4YFCLuyXNlQ/LE6UkbODXlQcLOppfX6UMxCEkUhDLw==
|
||||
|
||||
react-is@17.0.2:
|
||||
version "17.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
|
||||
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
|
||||
react-is@18.0.0:
|
||||
version "18.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.0.0.tgz#026f6c4a27dbe33bf4a35655b9e1327c4e55e3f5"
|
||||
integrity sha512-yUcBYdBBbo3QiPsgYDcfQcIkGZHfxOaoE6HLSnr1sPzMhdyxusbfKOSUbSd/ocGi32dxcj366PsTj+5oggeKKw==
|
||||
|
||||
react-is@^16.13.1, react-is@^16.7.0:
|
||||
version "16.13.1"
|
||||
@ -5084,13 +5084,12 @@ react-twitter-embed@^4.0.4:
|
||||
dependencies:
|
||||
scriptjs "^2.5.9"
|
||||
|
||||
react@17.0.2:
|
||||
version "17.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
|
||||
integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
|
||||
react@18.0.0:
|
||||
version "18.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-18.0.0.tgz#b468736d1f4a5891f38585ba8e8fb29f91c3cb96"
|
||||
integrity sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
||||
reading-time@^1.5.0:
|
||||
version "1.5.0"
|
||||
@ -5229,9 +5228,9 @@ remark-mdx@^1.6.22:
|
||||
unified "9.2.0"
|
||||
|
||||
remark-mdx@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.1.0.tgz#ae29ccd4c974a39ca671cd533acf9c7560a8bba4"
|
||||
integrity sha512-J6Yqw566SaEy6A9Neni1JJTaEjbjsM3OsKqL04TtCvZhevRtFi8CG8GIQPzvxIRKRCAOnWw1Vpk1AInB1OpNqA==
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.1.1.tgz#14021be9ecbc9ad0310f4240980221328aa7ed55"
|
||||
integrity sha512-0wXdEITnFyjLquN3VvACNLzbGzWM5ujzTvfgOkONBZgSFJ7ezLLDaTWqf6H9eUgVITEP8asp6LJ0W/X090dXBg==
|
||||
dependencies:
|
||||
mdast-util-mdx "^2.0.0"
|
||||
micromark-extension-mdxjs "^1.0.0"
|
||||
@ -5402,13 +5401,12 @@ sax@^1.2.4:
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
|
||||
scheduler@^0.20.2:
|
||||
version "0.20.2"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
|
||||
integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
|
||||
scheduler@^0.21.0:
|
||||
version "0.21.0"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820"
|
||||
integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
||||
scriptjs@^2.5.9:
|
||||
version "2.5.9"
|
||||
@ -5998,9 +5996,9 @@ unist-util-position-from-estree@^1.0.0, unist-util-position-from-estree@^1.1.0:
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
unist-util-position@^4.0.0:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.2.tgz#1915816906a3503f3e40d65b6e4fe6d41845d2e3"
|
||||
integrity sha512-Y6+plxR41dOLbyyqVDLuGWgXDmxdXslCSRYQkSDagBnOT9oFsQH0J8FzhirSklUEe0xZTT0WDnAE1gXPaDFljA==
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.3.tgz#5290547b014f6222dff95c48d5c3c13a88fadd07"
|
||||
integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
@ -6102,9 +6100,9 @@ use-composed-ref@^1.0.0:
|
||||
integrity sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw==
|
||||
|
||||
use-isomorphic-layout-effect@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225"
|
||||
integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb"
|
||||
integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==
|
||||
|
||||
use-latest@^1.0.0:
|
||||
version "1.2.0"
|
||||
@ -6113,13 +6111,6 @@ use-latest@^1.0.0:
|
||||
dependencies:
|
||||
use-isomorphic-layout-effect "^1.0.0"
|
||||
|
||||
use-subscription@1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"
|
||||
integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==
|
||||
dependencies:
|
||||
object-assign "^4.1.1"
|
||||
|
||||
util-deprecate@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
|
Reference in New Issue
Block a user