feat(docs): a11y section added

This commit is contained in:
Junior Garcia 2023-05-01 00:20:48 -03:00
parent ea70b2783e
commit 9ee03af1d0
13 changed files with 373 additions and 77 deletions

View File

@ -0,0 +1,210 @@
/* eslint-disable react/display-name */
import {
Button,
Link as NextUILink,
Dropdown,
DropdownSection,
DropdownTrigger,
DropdownMenu,
DropdownItem,
} from "@nextui-org/react";
import {motion, useInView} from "framer-motion";
import {TRANSITION_EASINGS} from "@nextui-org/framer-transitions";
import {clsx} from "@nextui-org/shared-utils";
import {
AddNoteBulkIcon,
CopyDocumentBulkIcon,
EditDocumentBulkIcon,
DeleteDocumentBulkIcon,
} from "@nextui-org/shared-icons";
import Link from "next/link";
import {useRef} from "react";
import {FeaturesGrid} from "../features-grid";
import {title, subtitle, titleWrapper, sectionWrapper} from "@/components/primitives";
import {IconSvgProps} from "@/types";
const a11yItems = [
"Keyboard navigation",
"Managed focus",
"Collision aware",
"Alignment control",
"Screen reader support",
"Typehead support",
];
const MotionTickBoldIcon = ({
size = 24,
delay = 0,
width,
height,
}: IconSvgProps & {
delay?: number;
}) => {
const ref = useRef<any>(null);
const isInView = useInView(ref, {
margin: "10px",
once: true,
});
const variants = {
visible: {
scale: 1,
opacity: 1,
transition: {
duration: delay,
easing: TRANSITION_EASINGS.spring,
},
},
hidden: {
scale: 0,
opacity: 0,
},
};
return (
<motion.svg
ref={ref as any}
animate={isInView ? "visible" : "hidden"}
aria-hidden="true"
fill="none"
focusable="false"
height={size || height}
initial={false}
role="presentation"
variants={variants}
viewBox="0 0 24 24"
width={size || width}
>
<path
d="M12 2C6.49 2 2 6.49 2 12C2 17.51 6.49 22 12 22C17.51 22 22 17.51 22 12C22 6.49 17.51 2 12 2ZM16.78 9.7L11.11 15.37C10.97 15.51 10.78 15.59 10.58 15.59C10.38 15.59 10.19 15.51 10.05 15.37L7.22 12.54C6.93 12.25 6.93 11.77 7.22 11.48C7.51 11.19 7.99 11.19 8.28 11.48L10.58 13.78L15.72 8.64C16.01 8.35 16.49 8.35 16.78 8.64C17.07 8.93 17.07 9.4 16.78 9.7Z"
fill="currentColor"
/>
</motion.svg>
);
};
const iconClasses = "text-2xl text-neutral-500 pointer-events-none flex-shrink-0";
export const A11yOtb = () => {
const ref = useRef<any>(null);
const isInView = useInView(ref, {
margin: "-10px",
});
return (
<section className={sectionWrapper({class: "pb-56"})}>
<div className="flex flex-col gap-8">
<div>
<div className={titleWrapper()}>
<h1 className={title({size: "lg"})}>Accessibility</h1>
<div>
<h1 className={title({color: "green", size: "lg"})}>out of the&nbsp;</h1>
<h1 className={title({size: "lg"})}>box.</h1>
</div>
</div>
<p className={subtitle()}>
NextUI components are built on top of&nbsp;
<NextUILink
isExternal
className="text-xl text-neutral-500 font-light [&>svg]:ml-1"
href="https://react-spectrum.adobe.com/react-aria/"
underline="always"
>
React Aria
</NextUILink>
&nbsp;ensuring exceptional accessibility support as a top priority.
</p>
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
<div className="flex flex-col mt-8 gap-6">
<FeaturesGrid
classNames={{
base: "grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4",
header: "pb-3",
iconWrapper: "bg-neutral-100 text-neutral-400",
}}
features={a11yItems.map((item, index) => ({
title: item,
icon: <MotionTickBoldIcon delay={index * 0.2} />,
}))}
/>
<Button
as={Link}
className="max-w-fit text-neutral-600"
color="neutral"
href="/docs/theme/customize-theme"
radius="full"
size="sm"
variant="flat"
>
Learn more
</Button>
</div>
<div
ref={ref}
className="w-full h-full min-h-[390px] bg-gradient-to-r rounded-xl flex pt-8 items-start justify-center from-[#4ADE80] to-[#06B6D4]"
>
{isInView && (
<Dropdown isOpen className="shadow-xl" placement="bottom" shouldFlip={false}>
<DropdownTrigger>
<Button color="success" variant="flat">
Actions
</Button>
</DropdownTrigger>
<DropdownMenu
aria-label="Actions"
closeOnSelect={false}
color="neutral"
variant="flat"
>
<DropdownSection title="Actions">
<DropdownItem
key="new"
description="Create a new file"
shortcut="⌘N"
startContent={<AddNoteBulkIcon className={iconClasses} />}
>
New file
</DropdownItem>
<DropdownItem
key="copy"
description="Copy the file link"
shortcut="⌘C"
startContent={<CopyDocumentBulkIcon className={iconClasses} />}
>
Copy link
</DropdownItem>
<DropdownItem
key="edit"
description="Allows you to edit the file"
shortcut="⌘⇧E"
startContent={<EditDocumentBulkIcon className={iconClasses} />}
>
Edit file
</DropdownItem>
</DropdownSection>
<DropdownSection title="Danger zone">
<DropdownItem
key="delete"
className="text-danger"
color="danger"
description="Permanently delete the file"
shortcut="⌘⇧D"
startContent={
<DeleteDocumentBulkIcon className={clsx(iconClasses, "!text-danger")} />
}
>
Delete file
</DropdownItem>
</DropdownSection>
</DropdownMenu>
</Dropdown>
)}
</div>
</div>
</div>
</section>
);
};

View File

@ -0,0 +1 @@
export * from "./a11y-otb";

View File

@ -190,7 +190,7 @@ export const CustomThemes = () => {
const [selectedTheme, setSelectedTheme] = useState<Theme>(themesTabs[0].id as Theme);
return (
<section className={sectionWrapper({class: "pb-56"})}>
<section className={sectionWrapper()}>
<div className="flex flex-col gap-8">
<div>
<div className={titleWrapper()}>
@ -205,11 +205,11 @@ export const CustomThemes = () => {
themes or create your own.
</p>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
<CustomThemesExample selectedTheme={selectedTheme} onChangeTheme={setSelectedTheme} />
<CodeWindow
showWindowIcons
className="max-h-[440px] mt-12"
className="max-h-[440px] min-h-[390px] mt-12"
highlightLines={get(codeHighlights, selectedTheme)}
language="jsx"
title="tailwind.config.js"

View File

@ -2,7 +2,7 @@ import {tv, VariantProps} from "tailwind-variants";
export const shopCartStyles = tv({
slots: {
wrapper: "overflow-visible h-[240px] dark:border-none",
wrapper: "overflow-visible h-auto lg:h-[240px] dark:border-none",
imageWrapper: [
"flex-none",
"w-full",
@ -92,7 +92,7 @@ export const shopCartStyles = tv({
wrapper: "rounded-3xl",
contentWrapper: "ml-3",
imageWrapper: [
"scale-[1.3]",
"lg:scale-[1.3]",
"before:rounded-3xl",
"before:from-[#870172] before:to-[#18000E]",
"shadow-lg",
@ -118,7 +118,7 @@ export const shopCartStyles = tv({
wrapper: "rounded-md",
contentWrapper: "ml-3",
imageWrapper: [
"scale-[1.3]",
"lg:scale-[1.3]",
"before:rounded-md",
"before:from-[#323232] before:to-[#000000]",
"shadow-xl",

View File

@ -1,20 +1,39 @@
import React, {ReactNode} from "react";
import {Card, CardHeader, CardBody, LinkProps} from "@nextui-org/react";
import React, {ReactNode, useMemo} from "react";
import {tv} from "tailwind-variants";
import {Card, CardHeader, CardBody, LinkProps, SlotsToClasses} from "@nextui-org/react";
import {useRouter} from "next/router";
import {LinkIcon} from "@nextui-org/shared-icons";
const styles = tv({
slots: {
base: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4",
card:
"dark:border-none before:bg-white/5 before:backdrop-blur-lg before:backdrop-saturate-[1.8]",
header: "gap-2 pb-0",
iconWrapper: "flex justify-center p-2 rounded-full items-center bg-secondary-100 text-pink-500",
title: "text-base font-semibold",
description: "font-light text-base text-neutral-700",
},
});
export type FeaturesGridSlots = keyof ReturnType<typeof styles>;
export interface Feature extends LinkProps {
title: string;
description: string;
icon: ReactNode;
description?: string;
}
interface FeaturesGridProps {
features: Feature[];
classNames?: SlotsToClasses<FeaturesGridSlots>;
}
export const FeaturesGrid: React.FC<FeaturesGridProps> = ({features, ...props}) => {
export const FeaturesGrid: React.FC<FeaturesGridProps> = ({features, classNames, ...props}) => {
const router = useRouter();
const slots = useMemo(() => styles(), []);
const handleClick = (feat: Feature) => {
if (!feat.href) {
return;
@ -29,25 +48,27 @@ export const FeaturesGrid: React.FC<FeaturesGridProps> = ({features, ...props})
};
return (
<div className="grid grid-cols-4 gap-4" {...props}>
<div className={slots.base({class: classNames?.base})} {...props}>
{features.map((feat: Feature, index: number) => (
<Card
key={`${feat.title}_${index}`}
isBlurred
className="border-none before:bg-white/5 before:backdrop-blur-lg before:backdrop-saturate-[1.8]"
className={slots.card({class: classNames?.card})}
isPressable={!!feat.href}
onPress={() => handleClick(feat)}
>
<CardHeader className="gap-2 pb-0">
<div className="flex justify-center p-2 rounded-full items-center bg-secondary-100 text-pink-500">
{feat.icon}
</div>
<p className="text-base font-semibold">{feat.title}</p>
<CardHeader className={slots.header({class: classNames?.header})}>
<div className={slots.iconWrapper({class: classNames?.iconWrapper})}>{feat.icon}</div>
<p className={slots.title({class: classNames?.title})}>{feat.title}</p>
{feat.isExternal && <LinkIcon className="text-white" height={18} width={18} />}
</CardHeader>
<CardBody>
<p className="font-light text-base text-neutral-700">{feat.description}</p>
</CardBody>
{feat.description && (
<CardBody>
<p className={slots.description({class: classNames?.description})}>
{feat.description}
</p>
</CardBody>
)}
</Card>
))}
</div>

View File

@ -17,6 +17,7 @@ import {ArrowRightIcon, MoonFilledIcon, SunFilledIcon} from "@nextui-org/shared-
import {useTheme} from "next-themes";
import dynamic from "next/dynamic";
import {useMediaQuery} from "@/hooks/use-media-query";
import {title, subtitle} from "@/components/primitives";
import {NextUILogo} from "@/components";
import {GithubIcon} from "@/components/icons";
@ -36,7 +37,7 @@ const FloatingComponents: React.FC<{mounted: boolean}> = ({mounted}) => {
};
return (
<div className="flex flex-col relative w-1/2">
<div className="hidden lg:flex flex-col relative w-1/2">
<Switch
classNames={{
base:
@ -160,6 +161,7 @@ const FloatingComponents: React.FC<{mounted: boolean}> = ({mounted}) => {
export const Hero = () => {
const [mounted, setMounted] = useState(false);
const isTablet = useMediaQuery(1024);
useEffect(() => {
setMounted(true);
@ -167,7 +169,7 @@ export const Hero = () => {
return (
<section className="flex relative w-full flex-nowrap justify-between items-center h-[calc(100vh_-_64px)] 2xl:h-[calc(84vh_-_64px)]">
<div className="flex flex-col gap-6 w-1/2 xl:mt-10">
<div className="flex flex-col gap-6 w-full lg:w-1/2 xl:mt-10">
<div>
<h1 className={title()}>Make&nbsp;</h1>
<h1 className={title({color: "violet"})}>beautiful&nbsp;</h1>
@ -196,7 +198,7 @@ export const Hero = () => {
</div>
</div>
<FloatingComponents mounted={mounted} />
{!isTablet && <FloatingComponents mounted={mounted} />}
<DynamicLopperBG
className="absolute translate-y-[10%] -z-50 opacity-0 data-[mounted=true]:opacity-100 transition-opacity"

View File

@ -0,0 +1,19 @@
import {IconSvgProps} from "@/types";
export const TickBoldIcon = ({size = 24, width, height, ...props}: IconSvgProps) => (
<svg
aria-hidden="true"
fill="none"
focusable="false"
height={size || height}
role="presentation"
viewBox="0 0 24 24"
width={size || width}
{...props}
>
<path
d="M12 2C6.49 2 2 6.49 2 12C2 17.51 6.49 22 12 22C17.51 22 22 17.51 22 12C22 6.49 17.51 2 12 2ZM16.78 9.7L11.11 15.37C10.97 15.51 10.78 15.59 10.58 15.59C10.38 15.59 10.19 15.51 10.05 15.37L7.22 12.54C6.93 12.25 6.93 11.77 7.22 11.48C7.51 11.19 7.99 11.19 8.28 11.48L10.58 13.78L15.72 8.64C16.01 8.35 16.49 8.35 16.78 8.64C17.07 8.93 17.07 9.4 16.78 9.7Z"
fill="currentColor"
/>
</svg>
);

View File

@ -6,3 +6,4 @@ export * from "./looper-bg";
export * from "./features-grid";
export * from "./custom-themes";
export * from "./code-window";
export * from "./a11y-otb";

View File

@ -5,7 +5,7 @@ export const titleWrapper = tv({
});
export const title = tv({
base: "text-5xl tracking-tight inline font-semibold",
base: "tracking-tight inline font-semibold",
variants: {
color: {
violet: "from-[#FF1CF7] to-[#b249f8]",
@ -16,9 +16,9 @@ export const title = tv({
pink: "from-[#FF4ECD] to-[#F21361]",
},
size: {
sm: "text-3xl",
md: "text-5xl",
lg: "text-6xl",
sm: "text-2xl lg:text-3xl",
md: "text-4xl lg:text-5xl",
lg: "text-5xl lg:text-6xl",
},
fullWidth: {
true: "w-full block",
@ -45,5 +45,5 @@ export const subtitle = tv({
});
export const sectionWrapper = tv({
base: "relative z-10 flex flex-col gap-2 w-full my-56",
base: "relative z-10 flex flex-col gap-2 w-full mt-56 pb-20",
});

View File

@ -0,0 +1,32 @@
import {useState, useCallback, useEffect} from "react";
export const useMediaQuery = (width: number): boolean => {
const [targetReached, setTargetReached] = useState(false);
const updateTarget = useCallback((e: MediaQueryListEvent) => {
if (e.matches) {
setTargetReached(true);
} else {
setTargetReached(false);
}
}, []);
useEffect(() => {
const media = window.matchMedia(`(max-width: ${width}px)`);
media.addListener(updateTarget);
// Check on mount (callback is not called until a change occurs)
if (media.matches) {
setTargetReached(true);
}
return () => media.removeListener(updateTarget);
}, []);
return targetReached;
};
export const useIsMobile = () => {
return useMediaQuery(650);
};

View File

@ -12,13 +12,15 @@
"@nextui-org/react": "workspace:*",
"@nextui-org/shared-icons": "workspace:*",
"@nextui-org/shared-utils": "workspace:*",
"@nextui-org/framer-transitions": "workspace:*",
"@nextui-org/use-is-mobile": "workspace:*",
"@nextui-org/theme": "workspace:*",
"@react-aria/visually-hidden": "^3.8.0",
"@vercel/analytics": "^0.1.11",
"framer-motion": "^10.11.2",
"hast-util-to-html": "7.1.2",
"lodash": "^4.17.21",
"next": "13.3.0",
"next": "13.3.2",
"next-themes": "^0.2.1",
"parse-numeric-range": "1.2.0",
"prism-react-renderer": "^1.2.1",

View File

@ -1,5 +1,5 @@
import {DefaultLayout} from "@/layouts";
import {Hero, FeaturesGrid, CustomThemes} from "@/components";
import {Hero, FeaturesGrid, CustomThemes, A11yOtb} from "@/components";
import landingContent from "@/content/landing";
const IndexPage = () => {
@ -8,6 +8,7 @@ const IndexPage = () => {
<Hero />
<FeaturesGrid features={landingContent.topFeatures} />
<CustomThemes />
<A11yOtb />
</DefaultLayout>
);
};

101
pnpm-lock.yaml generated
View File

@ -269,6 +269,9 @@ importers:
apps/docs:
dependencies:
'@nextui-org/framer-transitions':
specifier: workspace:*
version: link:../../packages/utilities/framer-transitions
'@nextui-org/react':
specifier: workspace:*
version: link:../../packages/core/react
@ -281,6 +284,9 @@ importers:
'@nextui-org/theme':
specifier: workspace:*
version: link:../../packages/core/theme
'@nextui-org/use-is-mobile':
specifier: workspace:*
version: link:../../packages/hooks/use-is-mobile
'@react-aria/visually-hidden':
specifier: ^3.8.0
version: 3.8.0(react@18.2.0)
@ -297,11 +303,11 @@ importers:
specifier: ^4.17.21
version: 4.17.21
next:
specifier: 13.3.0
version: 13.3.0(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
specifier: 13.3.2
version: 13.3.2(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
next-themes:
specifier: ^0.2.1
version: 0.2.1(next@13.3.0)(react-dom@18.2.0)(react@18.2.0)
version: 0.2.1(next@13.3.2)(react-dom@18.2.0)(react@18.2.0)
parse-numeric-range:
specifier: 1.2.0
version: 1.2.0
@ -353,10 +359,10 @@ importers:
version: 10.4.14(postcss@8.4.21)
eslint-config-next:
specifier: ^11.0.0
version: 11.0.0(eslint-import-resolver-typescript@2.4.0)(eslint@7.29.0)(next@13.3.0)(typescript@4.9.5)
version: 11.0.0(eslint-import-resolver-typescript@2.4.0)(eslint@7.29.0)(next@13.3.2)(typescript@4.9.5)
next-sitemap:
specifier: ^4.0.7
version: 4.0.7(@next/env@13.3.2)(next@13.3.0)
version: 4.0.7(@next/env@13.3.2)(next@13.3.2)
postcss:
specifier: ^8.4.21
version: 8.4.21
@ -5068,83 +5074,79 @@ packages:
dev: true
optional: true
/@next/env@13.3.0:
resolution: {integrity: sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ==}
/@next/env@13.3.2:
resolution: {integrity: sha512-W+RJPtDj8PhOmZFi0MMhFoyWCz4tJeDEm7WtTTKflD+fgvmxpuOwxfQ2RWMz2gwnz6gL6hCuXtCtPpBBHDB7rg==}
dev: true
/@next/eslint-plugin-next@11.0.0:
resolution: {integrity: sha512-fPZ0904yY1box6bRpR9rJqIkNxJdvzzxH7doXS+cdjyBAdptMR7wj3mcx1hEikBHzWduU8BOXBvRg2hWc09YDQ==}
dev: true
/@next/swc-darwin-arm64@13.3.0:
resolution: {integrity: sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w==}
/@next/swc-darwin-arm64@13.3.2:
resolution: {integrity: sha512-Wa5o2EbkBP0NcUM13sEjzGoB86YTZWUfoqbbVB7gs9RJAy8KkIoGNoLV7K55fru7GNgHsRMga3j1FadjJJWQYg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
optional: true
/@next/swc-darwin-x64@13.3.0:
resolution: {integrity: sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg==}
/@next/swc-darwin-x64@13.3.2:
resolution: {integrity: sha512-mSk/rSKIo/VMTQa0t8DMELsNjjyYHMbX0q+MK7+SoWysiA5KrU0MQ2h8DUPf2T5tmQjyaUpX49l4j/dr2jovBA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
requiresBuild: true
optional: true
/@next/swc-linux-arm64-gnu@13.3.0:
resolution: {integrity: sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw==}
/@next/swc-linux-arm64-gnu@13.3.2:
resolution: {integrity: sha512-+5OC61uF33s0GdiGK2D5436Z2BqE8tJnlC6csTcBvCKQyvLsp6H5sPND5A1D2p/Gzh0mIGV/5vqfQ8yy+akOjw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
/@next/swc-linux-arm64-musl@13.3.0:
resolution: {integrity: sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ==}
/@next/swc-linux-arm64-musl@13.3.2:
resolution: {integrity: sha512-TZ7c7iZ3MB8yRBukbNVNzKSX/k9DKtGaEuofIZBWp+o4e29e8iuJaej9UUCNUkN6L/117/AEnlpH1c7yfvSj8Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
/@next/swc-linux-x64-gnu@13.3.0:
resolution: {integrity: sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA==}
/@next/swc-linux-x64-gnu@13.3.2:
resolution: {integrity: sha512-aVoiakznPxGFIMcNlnY4HlZ4Be6oGhthaLSoXiVeplAgHLzHU2UqPMWqB/8/1TfMdWwISmwH4hb6DcdQ/PzTyA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
/@next/swc-linux-x64-musl@13.3.0:
resolution: {integrity: sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw==}
/@next/swc-linux-x64-musl@13.3.2:
resolution: {integrity: sha512-D2CsQZkBq/hcdcQkMXrG2huLJDPhyMuO5J8ZOc5fZtI8D/UxcRjWWK8yw+JgbOdZ3D9IMJSD3cd5QMx4VEI+Kg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
/@next/swc-win32-arm64-msvc@13.3.0:
resolution: {integrity: sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA==}
/@next/swc-win32-arm64-msvc@13.3.2:
resolution: {integrity: sha512-mjiWKEf9i1JAVePOa0Uw7c5c9Dp5D0LrevwIg31SNEpp8NwTr+ifHQzgf/ELNBWMxMLyiZiywWbYdcIjoa5y4A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
requiresBuild: true
optional: true
/@next/swc-win32-ia32-msvc@13.3.0:
resolution: {integrity: sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w==}
/@next/swc-win32-ia32-msvc@13.3.2:
resolution: {integrity: sha512-fee18wB9lfAnyAwJbyqN/PhcXWH1lGpBWJVF0gTB8G8/eUU0Vlq524Qt1RCt0K0pxLsSEhw1wEpGvqYYrAdQTA==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
requiresBuild: true
optional: true
/@next/swc-win32-x64-msvc@13.3.0:
resolution: {integrity: sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ==}
/@next/swc-win32-x64-msvc@13.3.2:
resolution: {integrity: sha512-eE6hPs0vtM08UB3B8YM1KIBOYZHJPF7NtWBdU0EIvRJ+R197+3W3VraaVBMMg0zy0e2e1jKgQPypakxN+vfZcw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@ -8471,6 +8473,11 @@ packages:
dependencies:
tslib: 2.5.0
/@swc/helpers@0.5.1:
resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
dependencies:
tslib: 2.5.0
/@swc/jest@0.2.24(@swc/core@1.3.35):
resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==}
engines: {npm: '>= 7.0.0'}
@ -12988,7 +12995,7 @@ packages:
object.entries: 1.1.6
dev: true
/eslint-config-next@11.0.0(eslint-import-resolver-typescript@2.4.0)(eslint@7.29.0)(next@13.3.0)(typescript@4.9.5):
/eslint-config-next@11.0.0(eslint-import-resolver-typescript@2.4.0)(eslint@7.29.0)(next@13.3.2)(typescript@4.9.5):
resolution: {integrity: sha512-pmatg4zqb5Vygu2HrSPxbsCBudXO9OZQUMKQCyrPKRvfL8PJ3lOIOzzwsiW68eMPXOZwOc1yxTRZWKNY8OJT0w==}
peerDependencies:
eslint: ^7.23.0
@ -13007,7 +13014,7 @@ packages:
eslint-plugin-jsx-a11y: 6.4.1(eslint@7.29.0)
eslint-plugin-react: 7.23.2(eslint@7.29.0)
eslint-plugin-react-hooks: 4.6.0(eslint@7.29.0)
next: 13.3.0(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
next: 13.3.2(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
typescript: 4.9.5
transitivePeerDependencies:
- eslint-import-resolver-typescript
@ -17819,7 +17826,7 @@ packages:
resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==}
dev: true
/next-sitemap@4.0.7(@next/env@13.3.2)(next@13.3.0):
/next-sitemap@4.0.7(@next/env@13.3.2)(next@13.3.2):
resolution: {integrity: sha512-S2g5IwJeO0+ecmFq981fb+Mw9YWmntOuN/qTCxclSkUibOJ8qKIOye0vn6NEJ1S4tKhbY+MTYKgJpNdFZYxLoA==}
engines: {node: '>=14.18'}
hasBin: true
@ -17830,24 +17837,24 @@ packages:
'@corex/deepmerge': 4.0.43
'@next/env': 13.3.2
minimist: 1.2.8
next: 13.3.0(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
next: 13.3.2(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
dev: true
/next-themes@0.2.1(next@13.3.0)(react-dom@18.2.0)(react@18.2.0):
/next-themes@0.2.1(next@13.3.2)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==}
peerDependencies:
next: '*'
react: '*'
react-dom: '*'
dependencies:
next: 13.3.0(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
next: 13.3.2(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
/next@13.3.0(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA==}
engines: {node: '>=14.6.0'}
/next@13.3.2(@babel/core@7.21.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-82VuWoMGWFqGUwCEWcqkIhGgdRry+VKVBZ9KNte1Uk2byZKvPZrC5c62fYHrIhSf36YKY6m21hxdyDzn6MDHFA==}
engines: {node: '>=16.8.0'}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
@ -17866,8 +17873,8 @@ packages:
sass:
optional: true
dependencies:
'@next/env': 13.3.0
'@swc/helpers': 0.4.14
'@next/env': 13.3.2
'@swc/helpers': 0.5.1
busboy: 1.6.0
caniuse-lite: 1.0.30001481
postcss: 8.4.14
@ -17875,15 +17882,15 @@ packages:
react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.1(@babel/core@7.21.0)(react@18.2.0)
optionalDependencies:
'@next/swc-darwin-arm64': 13.3.0
'@next/swc-darwin-x64': 13.3.0
'@next/swc-linux-arm64-gnu': 13.3.0
'@next/swc-linux-arm64-musl': 13.3.0
'@next/swc-linux-x64-gnu': 13.3.0
'@next/swc-linux-x64-musl': 13.3.0
'@next/swc-win32-arm64-msvc': 13.3.0
'@next/swc-win32-ia32-msvc': 13.3.0
'@next/swc-win32-x64-msvc': 13.3.0
'@next/swc-darwin-arm64': 13.3.2
'@next/swc-darwin-x64': 13.3.2
'@next/swc-linux-arm64-gnu': 13.3.2
'@next/swc-linux-arm64-musl': 13.3.2
'@next/swc-linux-x64-gnu': 13.3.2
'@next/swc-linux-x64-musl': 13.3.2
'@next/swc-win32-arm64-msvc': 13.3.2
'@next/swc-win32-ia32-msvc': 13.3.2
'@next/swc-win32-x64-msvc': 13.3.2
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros