diff --git a/package.json b/package.json index 96cef39c7f..faca265fba 100644 --- a/package.json +++ b/package.json @@ -52,19 +52,19 @@ ] }, "dependencies": { - "@babel/cli": "7.17.10", - "@babel/core": "7.13.10", - "@babel/preset-typescript": "^7.13.0", + "@babel/cli": "7.20.7", + "@babel/core": "7.20.12", + "@babel/preset-typescript": "^7.18.6", "@codecademy/eslint-config": "8.0.0", "@codecademy/prettier-config": "^0.2.0", "@codecademy/tsconfig": "^0.2.0", - "@emotion/babel-plugin": "^11.3.0", + "@emotion/babel-plugin": "^11.10.5", "@emotion/jest": "^11.3.0", "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", "@nrwl/cli": "^14.5.2", - "@nrwl/nx-cloud": "^14.3.0", "@nrwl/jest": "^14.5.2", + "@nrwl/nx-cloud": "^14.3.0", "@nrwl/react": "^14.5.2", "@svgr/cli": "5.5.0", "@testing-library/dom": "^8.11.1", @@ -84,7 +84,7 @@ "@typescript-eslint/parser": "^5.15.0", "babel-jest": "28.1", "babel-plugin-macros": "3.0.1", - "babel-preset-codecademy": "6.0.1-alpha.8dfef4.0", + "babel-preset-codecademy": "7.0.0", "component-test-setup": "^0.3.1", "conventional-changelog-cli": "^2.0.34", "conventional-changelog-conventionalcommits": "^4.3.0", diff --git a/packages/gamut-icons/package.json b/packages/gamut-icons/package.json index ac2fcdf3f8..25cf3366f7 100644 --- a/packages/gamut-icons/package.json +++ b/packages/gamut-icons/package.json @@ -37,6 +37,6 @@ "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", "lodash": "^4.17.5", - "react": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0" } } diff --git a/packages/gamut-illustrations/package.json b/packages/gamut-illustrations/package.json index d36a13f918..b57176dc80 100644 --- a/packages/gamut-illustrations/package.json +++ b/packages/gamut-illustrations/package.json @@ -22,8 +22,8 @@ "peerDependencies": { "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", - "react": ">=17.0.2", - "react-dom": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0", + "react-dom": "^17.0.2 || ^18.2.0" }, "publishConfig": { "access": "public" diff --git a/packages/gamut-illustrations/src/__tests__/gamut-illustrations.test.tsx b/packages/gamut-illustrations/src/__tests__/gamut-illustrations.test.tsx index 3e281c20e3..00266532d2 100644 --- a/packages/gamut-illustrations/src/__tests__/gamut-illustrations.test.tsx +++ b/packages/gamut-illustrations/src/__tests__/gamut-illustrations.test.tsx @@ -3,10 +3,10 @@ import { render } from '@testing-library/react'; import * as illustrations from '..'; describe('illustrations', () => { - for (const [name, Illustration] of Object.entries(illustrations)) { - if (name.startsWith('_')) continue; - it(`${name} renders`, () => { + it.each(Object.entries(illustrations))( + '%s renders', + (_name, Illustration) => { render(); - }); - } + } + ); }); diff --git a/packages/gamut-labs/package.json b/packages/gamut-labs/package.json index 804cac9bf7..c118238431 100644 --- a/packages/gamut-labs/package.json +++ b/packages/gamut-labs/package.json @@ -21,8 +21,8 @@ "peerDependencies": { "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", - "react": ">=17.0.2", - "react-dom": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0", + "react-dom": "^17.0.2 || ^18.2.0" }, "dependencies": { "@codecademy/gamut": "51.7.3", @@ -32,9 +32,8 @@ "@codecademy/gamut-styles": "14.2.5", "@codecademy/tracking": "1.0.4", "@codecademy/variance": "0.20.5", - "@loadable/component": "^5.15.2", "classnames": "^2.2.5", - "framer-motion": "^4.1.17", + "framer-motion": "^6.5.1", "freezeframe": "^5.0.2", "intersection-observer": "^0.12.0", "lodash": "^4.17.5", @@ -53,7 +52,6 @@ "@testing-library/react": "^12.1.2", "@testing-library/react-hooks": "^7.0.2", "@testing-library/user-event": "^13.5.0", - "@types/loadable__component": "^5.13.4", "@types/pluralize": "0.0.29" }, "scripts": { diff --git a/packages/gamut-labs/src/AppBar/AppBarSection.tsx b/packages/gamut-labs/src/AppBar/AppBarSection.tsx index 50d85d3756..7534607ddc 100644 --- a/packages/gamut-labs/src/AppBar/AppBarSection.tsx +++ b/packages/gamut-labs/src/AppBar/AppBarSection.tsx @@ -1,16 +1,17 @@ +import { WithChildrenProp } from '@codecademy/gamut'; import cx from 'classnames'; import * as React from 'react'; // eslint-disable-next-line gamut/no-css-standalone import styles from './styles/index.module.scss'; -export type AppBarSectionProps = { +export interface AppBarSectionProps extends WithChildrenProp { /** * Position of the the section within the AppBar. */ position?: 'left' | 'center' | 'right'; className?: string; -}; +} export const AppBarSection: React.FC = ({ position, diff --git a/packages/gamut-labs/src/AppBar/index.tsx b/packages/gamut-labs/src/AppBar/index.tsx index 165a4f41ff..c74d3ddf85 100644 --- a/packages/gamut-labs/src/AppBar/index.tsx +++ b/packages/gamut-labs/src/AppBar/index.tsx @@ -1,17 +1,17 @@ -import { ContentContainer } from '@codecademy/gamut'; +import { ContentContainer, WithChildrenProp } from '@codecademy/gamut'; import cx from 'classnames'; import * as React from 'react'; // eslint-disable-next-line gamut/no-css-standalone import styles from './styles/index.module.scss'; -export type AppBarProps = { +export interface AppBarProps extends WithChildrenProp { className?: string; /** * Whether the container should be larger than the default content size. */ wide?: boolean; -}; +} export const AppBar: React.FC = ({ wide, diff --git a/packages/gamut-labs/src/AppHeader/shared.tsx b/packages/gamut-labs/src/AppHeader/shared.tsx index df5795fd97..f61b2f08d7 100644 --- a/packages/gamut-labs/src/AppHeader/shared.tsx +++ b/packages/gamut-labs/src/AppHeader/shared.tsx @@ -1,4 +1,10 @@ -import { Anchor, FlexBox, LayoutGrid, Text } from '@codecademy/gamut'; +import { + Anchor, + FlexBox, + LayoutGrid, + Text, + WithChildrenProp, +} from '@codecademy/gamut'; import { ArrowChevronDownFilledIcon } from '@codecademy/gamut-icons'; import { css, pxRem, states } from '@codecademy/gamut-styles'; import styled from '@emotion/styled'; @@ -7,9 +13,9 @@ import * as React from 'react'; export const appHeaderMobileBreakpoint = 'lg' as const; -export type AnimatedHeaderZoneProps = { +export interface AnimatedHeaderZoneProps extends WithChildrenProp { visible?: boolean; -}; +} const animatedPopoverVariants: Variants = { enter: { opacity: 1, transition: { duration: 0.2 } }, diff --git a/packages/gamut-labs/src/DropdownButton/index.tsx b/packages/gamut-labs/src/DropdownButton/index.tsx index fc7282bee0..93d3d36ca8 100644 --- a/packages/gamut-labs/src/DropdownButton/index.tsx +++ b/packages/gamut-labs/src/DropdownButton/index.tsx @@ -4,6 +4,7 @@ import { IconButton, Popover, StrokeButton, + WithChildrenProp, } from '@codecademy/gamut'; import { ArrowChevronDownFilledIcon, @@ -30,14 +31,14 @@ const HorizontalKebabIcon = styled(MiniKebabMenuIcon)( }) ); -export type DropdownButtonProps = { +export interface DropdownButtonProps extends WithChildrenProp { buttonType?: 'fill' | 'stroke' | 'kebab' | 'horizontalKebab'; dropdownItems: DropdownItem[]; align?: 'left' | 'right'; onClick?: (event: React.MouseEvent) => void; verticalOffset?: number; horizontalOffset?: number; -}; +} export const DropdownButton: React.FC = ({ buttonType = 'fill', diff --git a/packages/gamut-labs/src/GlobalFooter/FooterLinks.tsx b/packages/gamut-labs/src/GlobalFooter/FooterLinks.tsx index ec7c0cb2d5..4d18608ddb 100644 --- a/packages/gamut-labs/src/GlobalFooter/FooterLinks.tsx +++ b/packages/gamut-labs/src/GlobalFooter/FooterLinks.tsx @@ -37,7 +37,7 @@ export const FooterLinkItemWithAnchor: React.FC< } > = ({ trackingTarget, footerOnClick, ...anchorProps }) => { const anchorOnClick = useCallback( - (event) => { + (event: React.MouseEvent) => { footerOnClick({ event, target: trackingTarget }); }, [footerOnClick, trackingTarget] diff --git a/packages/gamut-labs/src/GlobalHeader/types.tsx b/packages/gamut-labs/src/GlobalHeader/types.tsx index 8792411d4d..451d53dd31 100644 --- a/packages/gamut-labs/src/GlobalHeader/types.tsx +++ b/packages/gamut-labs/src/GlobalHeader/types.tsx @@ -1,3 +1,4 @@ +import { WithChildrenProp } from '@codecademy/gamut'; import { ReactNode } from 'react'; import { @@ -9,7 +10,7 @@ import { AppHeaderNotificationSettings } from '../Notifications/types'; type RenderProfile = { desktop: () => ReactNode; mobile: () => ReactNode }; -type BaseHeader = { +interface BaseHeader extends WithChildrenProp { /** A method to be called on click/activating a header item */ action: AppHeaderClickHandler; /** A method to be called only on click/activating a *link* header item */ @@ -17,7 +18,7 @@ type BaseHeader = { className?: string; hidePricing?: boolean; search: AppHeaderSearch; -}; +} export type User = { avatar: string; diff --git a/packages/gamut-labs/src/GlobalPage/index.tsx b/packages/gamut-labs/src/GlobalPage/index.tsx index 7a729e59d0..9e92ceb316 100644 --- a/packages/gamut-labs/src/GlobalPage/index.tsx +++ b/packages/gamut-labs/src/GlobalPage/index.tsx @@ -2,6 +2,7 @@ import { AppWrapper, SkipToContent, SkipToContentTarget, + WithChildrenProp, } from '@codecademy/gamut'; import { Background } from '@codecademy/gamut-styles'; import { ComponentProps, forwardRef } from 'react'; @@ -21,7 +22,7 @@ export type GlobalPageBackgroundColor = | 'paleYellow' | 'white'; -export type GlobalPageProps = { +export interface GlobalPageProps extends WithChildrenProp { backgroundColor?: GlobalPageBackgroundColor; /** @@ -48,7 +49,7 @@ export type GlobalPageProps = { * Custom element ID to link to by the SkipToContent control, if not a default one at the beginning of the page. */ skipToContentId?: string; -}; +} const defaultSkipToContentId = 'page-skip-to-content-target'; diff --git a/packages/gamut-labs/src/HeaderHeightArea/index.tsx b/packages/gamut-labs/src/HeaderHeightArea/index.tsx index 9e2330ad37..fe5a44cd2f 100644 --- a/packages/gamut-labs/src/HeaderHeightArea/index.tsx +++ b/packages/gamut-labs/src/HeaderHeightArea/index.tsx @@ -1,4 +1,4 @@ -import { Box } from '@codecademy/gamut'; +import { Box, WithChildrenProp } from '@codecademy/gamut'; import { system, transitionConcat } from '@codecademy/gamut-styles'; import { ResponsiveProp } from '@codecademy/variance'; import { useTheme } from '@emotion/react'; @@ -28,11 +28,11 @@ const HeaderHeightAreaBase = styled(Box)( }) ); -export type HeaderHeightAreaProps = { +export interface HeaderHeightAreaProps extends WithChildrenProp { as?: React.ElementType; display: ResponsiveProp<'none' | 'block'>; title?: string; -}; +} export const HeaderHeightArea: React.FC = ({ as, diff --git a/packages/gamut-labs/src/HorizontalScrollMenu/index.tsx b/packages/gamut-labs/src/HorizontalScrollMenu/index.tsx index 054b8b5216..b5137b788f 100644 --- a/packages/gamut-labs/src/HorizontalScrollMenu/index.tsx +++ b/packages/gamut-labs/src/HorizontalScrollMenu/index.tsx @@ -1,6 +1,6 @@ import 'intersection-observer'; -import { Box, FlexBox } from '@codecademy/gamut'; +import { Box, FlexBox, WithChildrenProp } from '@codecademy/gamut'; import styled from '@emotion/styled'; import { Children, useEffect, useMemo, useRef } from 'react'; import * as React from 'react'; @@ -19,7 +19,7 @@ const ScrollItemWrapper = styled(Box)` } `; -export interface HorizontalScrollMenuProps { +export interface HorizontalScrollMenuProps extends WithChildrenProp { className?: string; } diff --git a/packages/gamut-labs/src/Interstitial/index.tsx b/packages/gamut-labs/src/Interstitial/index.tsx index 2f307389cc..3f944e32b3 100644 --- a/packages/gamut-labs/src/Interstitial/index.tsx +++ b/packages/gamut-labs/src/Interstitial/index.tsx @@ -1,9 +1,10 @@ +import { WithChildrenProp } from '@codecademy/gamut'; import { colors } from '@codecademy/gamut-styles'; import styled from '@emotion/styled'; import { useEffect, useRef, useState } from 'react'; import * as React from 'react'; -export type InterstitialProps = { +export interface InterstitialProps extends WithChildrenProp { /** If provided, these buttons will render below the title and children in a column. */ buttons?: React.ReactNode[]; className?: string; @@ -13,7 +14,7 @@ export type InterstitialProps = { focus?: boolean; /** h1 title for the interstitial */ title: string; -}; +} const InterstitialWrapper = styled.div` align-items: center; diff --git a/packages/gamut-labs/src/LandingPage/CTA.tsx b/packages/gamut-labs/src/LandingPage/CTA.tsx index 857bd7f4ee..71b2302c63 100644 --- a/packages/gamut-labs/src/LandingPage/CTA.tsx +++ b/packages/gamut-labs/src/LandingPage/CTA.tsx @@ -1,11 +1,11 @@ -import { CTAButton, FillButton } from '@codecademy/gamut'; +import { ButtonProps, CTAButton, FillButton } from '@codecademy/gamut'; import * as React from 'react'; -export type CTAProps = { +export interface CTAProps extends Pick { href: string; onClick?: React.MouseEventHandler; buttonType?: 'cta' | 'fill'; -}; +} export const CTA: React.FC = ({ buttonType = 'cta', diff --git a/packages/gamut-labs/src/LandingPage/Feature.tsx b/packages/gamut-labs/src/LandingPage/Feature.tsx index d02a67418a..5ac4db6766 100644 --- a/packages/gamut-labs/src/LandingPage/Feature.tsx +++ b/packages/gamut-labs/src/LandingPage/Feature.tsx @@ -1,4 +1,4 @@ -import { Box, Markdown, Text } from '@codecademy/gamut'; +import { Box, Markdown, Text, WithChildrenProp } from '@codecademy/gamut'; import { mediaQueries } from '@codecademy/gamut-styles'; import styled from '@emotion/styled'; import * as React from 'react'; @@ -26,7 +26,7 @@ export const FeaturedIcon: React.FC = ({ src, alt }) => ( {alt} ); -export const FeaturedStat: React.FC = ({ children }) => ( +export const FeaturedStat: React.FC = ({ children }) => ( ( ); -export type FeaturedTitleProps = { +export interface FeaturedTitleProps extends WithChildrenProp { as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; -}; +} export const FeaturedTitle: React.FC = ({ as, children, @@ -80,9 +80,11 @@ const FeatureBlock = styled.div` } } `; -export type FeatureProps = { + +export interface FeatureProps extends WithChildrenProp { testId?: string; -}; +} + export const Feature: React.FC = ({ testId, children }) => ( {children} ); diff --git a/packages/gamut-labs/src/LandingPage/PageFeatures.tsx b/packages/gamut-labs/src/LandingPage/PageFeatures.tsx index 8887803520..38b6e34aaa 100644 --- a/packages/gamut-labs/src/LandingPage/PageFeatures.tsx +++ b/packages/gamut-labs/src/LandingPage/PageFeatures.tsx @@ -4,6 +4,7 @@ import { ColumnProps, FlexBox, LayoutGrid, + WithChildrenProp, } from '@codecademy/gamut'; import { ReactNode } from 'react'; import * as React from 'react'; @@ -21,7 +22,7 @@ import { import { Title } from './Title'; import { BaseProps } from './types'; -export type PageFeaturesProps = BaseProps & { +export interface PageFeaturesProps extends BaseProps, WithChildrenProp { maxCols?: 1 | 2 | 3 | 4; featuresMedia?: 'image' | 'icon' | 'stat'; features: { @@ -32,7 +33,7 @@ export type PageFeaturesProps = BaseProps & { statText?: string; testId?: string; }[]; -}; +} const rowRenderEach = ( items: PageFeaturesProps['features'], diff --git a/packages/gamut-labs/src/LandingPage/Title.tsx b/packages/gamut-labs/src/LandingPage/Title.tsx index f6fb15c711..c7beaf357b 100644 --- a/packages/gamut-labs/src/LandingPage/Title.tsx +++ b/packages/gamut-labs/src/LandingPage/Title.tsx @@ -1,9 +1,9 @@ -import { Text } from '@codecademy/gamut'; +import { Text, WithChildrenProp } from '@codecademy/gamut'; import * as React from 'react'; -export type TitleProps = { +export interface TitleProps extends WithChildrenProp { isPageHeading?: boolean; -}; +} const titleProps = { heading: { diff --git a/packages/gamut-labs/src/LayoutMenu/LayoutMenu.tsx b/packages/gamut-labs/src/LayoutMenu/LayoutMenu.tsx index 00aa11952a..2052c2bd16 100644 --- a/packages/gamut-labs/src/LayoutMenu/LayoutMenu.tsx +++ b/packages/gamut-labs/src/LayoutMenu/LayoutMenu.tsx @@ -1,4 +1,10 @@ -import { Box, Flyout, Logo, StrokeButton } from '@codecademy/gamut'; +import { + Box, + Flyout, + Logo, + StrokeButton, + WithChildrenProp, +} from '@codecademy/gamut'; import { variant } from '@codecademy/gamut-styles'; import styled from '@emotion/styled'; import { useState } from 'react'; @@ -7,7 +13,7 @@ import * as React from 'react'; import { AccordionMenu, Section, SectionItem } from './AccordionMenu'; import { LayoutMenuSection } from './LayoutMenuSection'; -export type LayoutMenuProps = { +export interface LayoutMenuProps extends WithChildrenProp { /** * Accessibility label for the mobile Flyout's close button. */ @@ -40,7 +46,7 @@ export type LayoutMenuProps = { * Set fixed height for menu with overflow */ menuHeight?: 'sm' | 'md' | 'lg'; -}; +} const StyleBox = styled(Box)( variant({ diff --git a/packages/gamut-labs/src/LayoutMenu/SectionItemLink.tsx b/packages/gamut-labs/src/LayoutMenu/SectionItemLink.tsx index 70476d51f3..d67eb4d10c 100644 --- a/packages/gamut-labs/src/LayoutMenu/SectionItemLink.tsx +++ b/packages/gamut-labs/src/LayoutMenu/SectionItemLink.tsx @@ -1,10 +1,10 @@ -import { Anchor } from '@codecademy/gamut'; +import { Anchor, WithChildrenProp } from '@codecademy/gamut'; import * as React from 'react'; -export type SectionItemLinkProps = { +export interface SectionItemLinkProps extends WithChildrenProp { onClick: (event: React.MouseEvent) => void; href: string; -}; +} export const SectionItemLink: React.FC = ({ onClick, diff --git a/packages/gamut-labs/src/LayoutMenu/SelectedSectionItem.tsx b/packages/gamut-labs/src/LayoutMenu/SelectedSectionItem.tsx index 37a98e1833..bf2339473d 100644 --- a/packages/gamut-labs/src/LayoutMenu/SelectedSectionItem.tsx +++ b/packages/gamut-labs/src/LayoutMenu/SelectedSectionItem.tsx @@ -1,7 +1,9 @@ -import { Box, Text } from '@codecademy/gamut'; +import { Box, Text, WithChildrenProp } from '@codecademy/gamut'; import * as React from 'react'; -export const SelectedSectionItem: React.FC = ({ children }) => { +export const SelectedSectionItem: React.FC = ({ + children, +}) => { return ( {children} diff --git a/packages/gamut-labs/src/LayoutMenuVariant/LayoutMenu.tsx b/packages/gamut-labs/src/LayoutMenuVariant/LayoutMenu.tsx index 599e9e272f..b350081669 100644 --- a/packages/gamut-labs/src/LayoutMenuVariant/LayoutMenu.tsx +++ b/packages/gamut-labs/src/LayoutMenuVariant/LayoutMenu.tsx @@ -1,4 +1,10 @@ -import { Box, Flyout, Logo, StrokeButton } from '@codecademy/gamut'; +import { + Box, + Flyout, + Logo, + StrokeButton, + WithChildrenProp, +} from '@codecademy/gamut'; import { variant } from '@codecademy/gamut-styles'; import styled from '@emotion/styled'; import React, { useState } from 'react'; @@ -6,7 +12,7 @@ import React, { useState } from 'react'; import { AccordionMenu, Section, SectionItem } from './AccordionMenu'; import { LayoutMenuSection } from './LayoutMenuSection'; -export type LayoutMenuProps = { +export interface LayoutMenuProps extends WithChildrenProp { /** * Accessibility label for the mobile Flyout's close button. */ @@ -35,7 +41,7 @@ export type LayoutMenuProps = { * Set fixed height for menu with overflow */ menuHeight?: 'sm' | 'md' | 'lg'; -}; +} const StyleBox = styled(Box)( variant({ diff --git a/packages/gamut-labs/src/LayoutMenuVariant/SectionItemLink.tsx b/packages/gamut-labs/src/LayoutMenuVariant/SectionItemLink.tsx index 3c53bc0bda..1363600754 100644 --- a/packages/gamut-labs/src/LayoutMenuVariant/SectionItemLink.tsx +++ b/packages/gamut-labs/src/LayoutMenuVariant/SectionItemLink.tsx @@ -1,10 +1,10 @@ -import { Anchor } from '@codecademy/gamut'; +import { Anchor, WithChildrenProp } from '@codecademy/gamut'; import React from 'react'; -export type SectionItemLinkProps = { +export interface SectionItemLinkProps extends WithChildrenProp { onClick: (event: React.MouseEvent) => void; href: string; -}; +} export const SectionItemLink: React.FC = ({ onClick, diff --git a/packages/gamut-labs/src/ListSection/index.tsx b/packages/gamut-labs/src/ListSection/index.tsx index 93fbb27f22..ead9ee946e 100644 --- a/packages/gamut-labs/src/ListSection/index.tsx +++ b/packages/gamut-labs/src/ListSection/index.tsx @@ -1,3 +1,4 @@ +import { WithChildrenProp } from '@codecademy/gamut'; import { theme } from '@codecademy/gamut-styles'; import styled from '@emotion/styled'; import { Children, useState } from 'react'; @@ -5,7 +6,7 @@ import * as React from 'react'; import { PageSection, SectionButton } from '..'; -export type ListSectionProps = { +export interface ListSectionProps extends WithChildrenProp { title: string; headerButton?: SectionButton; headerSecondaryButton?: SectionButton; @@ -22,7 +23,7 @@ export type ListSectionProps = { * This is usually used for things like metrics tracking. */ onShowAllOrLessClick?: (showAll: boolean) => void; -}; +} const UnstyledUnorderedList = styled.ul` list-style: none; diff --git a/packages/gamut-labs/src/PageAlerts/PageAlertsProvider.tsx b/packages/gamut-labs/src/PageAlerts/PageAlertsProvider.tsx index 0f1bca1ea4..98696b73c2 100644 --- a/packages/gamut-labs/src/PageAlerts/PageAlertsProvider.tsx +++ b/packages/gamut-labs/src/PageAlerts/PageAlertsProvider.tsx @@ -1,3 +1,4 @@ +import { WithChildrenProp } from '@codecademy/gamut'; import { noop } from 'lodash/fp'; import { useCallback, useContext, useState } from 'react'; import * as React from 'react'; @@ -18,7 +19,9 @@ export const PageAlertsContext = React.createContext({ closeAlert: noop, }); -export const PageAlertsProvider: React.FC = ({ children }) => { +export const PageAlertsProvider: React.FC = ({ + children, +}) => { const [alerts, setAlerts] = useState([]); const addAlert = useCallback((newAlert: PageAlert) => { diff --git a/packages/gamut-labs/src/PageSection/index.tsx b/packages/gamut-labs/src/PageSection/index.tsx index 59ce392fc5..e012d4bf5a 100644 --- a/packages/gamut-labs/src/PageSection/index.tsx +++ b/packages/gamut-labs/src/PageSection/index.tsx @@ -1,4 +1,10 @@ -import { Box, FlexBox, Text, TextButton } from '@codecademy/gamut'; +import { + Box, + FlexBox, + Text, + TextButton, + WithChildrenProp, +} from '@codecademy/gamut'; import { AriaAttributes, ReactNode } from 'react'; import * as React from 'react'; @@ -16,12 +22,12 @@ function isSectionButtonATextButton( return (button as TextButtonMinimumProps).text !== undefined; } -export type PageSectionProps = { +export interface PageSectionProps extends WithChildrenProp { title: string; headerButton?: SectionButton; headerSecondaryButton?: SectionButton; footerButton?: SectionButton; -}; +} export const PageSection: React.FC = ({ title, diff --git a/packages/gamut-labs/src/PausableImage/__tests__/PausableImage.test.tsx b/packages/gamut-labs/src/PausableImage/__tests__/PausableImage.test.tsx index d1cb29ffdd..685938757d 100644 --- a/packages/gamut-labs/src/PausableImage/__tests__/PausableImage.test.tsx +++ b/packages/gamut-labs/src/PausableImage/__tests__/PausableImage.test.tsx @@ -1,9 +1,8 @@ import { setupRtl } from '@codecademy/gamut-tests'; +import { waitFor } from '@testing-library/react'; import { PausableImage } from '..'; -jest.mock('@loadable/component', () => () => () => 'pausable'); - const renderView = setupRtl(PausableImage); const createImg = (url: string) => ({ @@ -12,12 +11,15 @@ const createImg = (url: string) => ({ }); describe('PausableImage', () => { - it('renders a pausable image when the URL ends with .gif', () => { + it('renders a pausable image when the URL ends with .gif', async () => { const { view } = renderView({ ...createImg('image.gif'), }); - - view.getByText('pausable'); + // wait to find static image while loading pause ui + await view.findByRole('img'); + // wait to find pause button + await waitFor(() => view.findByText('Pause animated image')); + view.getByText('Pause animated image'); }); it('renders a static image when the URL does not end with .gif', () => { diff --git a/packages/gamut-labs/src/PausableImage/index.tsx b/packages/gamut-labs/src/PausableImage/index.tsx index 79f80dedb4..9ebdd46132 100644 --- a/packages/gamut-labs/src/PausableImage/index.tsx +++ b/packages/gamut-labs/src/PausableImage/index.tsx @@ -1,11 +1,8 @@ import { css } from '@emotion/react'; import styled from '@emotion/styled'; -import loadable from '@loadable/component'; import * as React from 'react'; -const BaseImage = loadable(() => import('./BaseImage'), { - ssr: false, -}); +const BaseImage = React.lazy(() => import('./BaseImage')); interface PauseableImageProps { src: string; @@ -27,10 +24,18 @@ const StaticImage = imageStyles; export const PausableImage: React.FC = (props) => { const staticImage = ; + // Avoid rendering React.Suspense on the server until it's fully supported by React & our applications + const [isMounted, setIsMounted] = React.useState(false); + React.useEffect(() => { + setIsMounted(true); + }, []); + return ( <> - {props.src?.endsWith('.gif') ? ( - + {isMounted && props.src?.endsWith('.gif') ? ( + + + ) : ( staticImage )} diff --git a/packages/gamut-labs/tsconfig.lib.json b/packages/gamut-labs/tsconfig.lib.json index b21c9cd30c..7e0f488422 100644 --- a/packages/gamut-labs/tsconfig.lib.json +++ b/packages/gamut-labs/tsconfig.lib.json @@ -26,6 +26,7 @@ "src/**/*.ts", "src/**/*.tsx", "typings/**/*.ts", - "../../packages/gamut-styles/dist/typings/theme.d.ts" + "../../packages/gamut-styles/dist/typings/theme.d.ts", + "../../packages/gamut/dist/typings/*.d.ts" ] } diff --git a/packages/gamut-patterns/package.json b/packages/gamut-patterns/package.json index 26b146e200..d1808f641d 100644 --- a/packages/gamut-patterns/package.json +++ b/packages/gamut-patterns/package.json @@ -27,8 +27,8 @@ "peerDependencies": { "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", - "react": ">=17.0.2", - "react-dom": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0", + "react-dom": "^17.0.2 || ^18.2.0" }, "publishConfig": { "access": "public" diff --git a/packages/gamut-patterns/tests/patterns.test.tsx b/packages/gamut-patterns/tests/patterns.test.tsx index 1c8f0e73d2..96be2a0bc5 100644 --- a/packages/gamut-patterns/tests/patterns.test.tsx +++ b/packages/gamut-patterns/tests/patterns.test.tsx @@ -1,13 +1,19 @@ import { render } from '@testing-library/react'; import * as patterns from '../dist/patterns'; +import { CheckerDense as GenericPatternComponent } from '../dist/patterns/CheckerDense'; + +const patternComponents = patterns as Record< + string, + typeof GenericPatternComponent +>; +const patternTable = Object.keys(patterns) + .filter((n) => !n.startsWith('_')) + .map((n) => [n]); describe('patterns', () => { - for (const [name, Pattern] of Object.entries(patterns)) { - // Skip __esmodule export - if (name.startsWith('_')) continue; - it(`${name} renders`, () => { - render(); - }); - } + it.each(patternTable)('%s renders', (name) => { + const Pattern = patternComponents[name]; + render(); + }); }); diff --git a/packages/gamut-styles/package.json b/packages/gamut-styles/package.json index 51b3c44137..45e71370c8 100644 --- a/packages/gamut-styles/package.json +++ b/packages/gamut-styles/package.json @@ -30,13 +30,11 @@ "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", "lodash": "^4.17.5", - "react": ">=17.0.2", - "react-helmet": "^6.1.0", + "react": "^17.0.2 || ^18.2.0", "stylis": "^4.0.7" }, "devDependencies": { "@emotion/jest": "^11.3.0", - "@types/react-helmet": "^6.1.0", "component-test-setup": "^0.3.1" }, "license": "MIT", diff --git a/packages/gamut-styles/src/AssetProvider.tsx b/packages/gamut-styles/src/AssetProvider.tsx index d6cd875bc1..9fe2ff6361 100644 --- a/packages/gamut-styles/src/AssetProvider.tsx +++ b/packages/gamut-styles/src/AssetProvider.tsx @@ -1,5 +1,3 @@ -import { Helmet } from 'react-helmet'; - import { webFonts } from './remoteAssets/fonts'; export const createFontLinks = () => @@ -17,5 +15,5 @@ export const createFontLinks = () => ); export const AssetProvider = () => { - return {createFontLinks()}; + return <>{createFontLinks()}; }; diff --git a/packages/gamut-styles/src/GamutProvider.tsx b/packages/gamut-styles/src/GamutProvider.tsx index cab70408a4..9e8a7e3fa1 100644 --- a/packages/gamut-styles/src/GamutProvider.tsx +++ b/packages/gamut-styles/src/GamutProvider.tsx @@ -14,6 +14,7 @@ import { Variables } from './globals/Variables'; import { coreTheme } from './themes/core'; export interface GamutProviderProps { + children?: React.ReactNode; useGlobals?: boolean; useCache?: boolean; theme: Theme; diff --git a/packages/gamut-styles/src/index.ts b/packages/gamut-styles/src/index.ts index b7a12cb934..f084a13cd9 100644 --- a/packages/gamut-styles/src/index.ts +++ b/packages/gamut-styles/src/index.ts @@ -1,5 +1,6 @@ import '@emotion/react'; +export * from './AssetProvider'; export * from './GamutProvider'; export * from './ColorMode'; export * from './Background'; diff --git a/packages/gamut-tests/package.json b/packages/gamut-tests/package.json index 8b5e4a8417..bc6056a025 100644 --- a/packages/gamut-tests/package.json +++ b/packages/gamut-tests/package.json @@ -22,7 +22,7 @@ "dist" ], "peerDependencies": { - "react": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0" }, "publishConfig": { "access": "public" diff --git a/packages/gamut-tests/src/index.tsx b/packages/gamut-tests/src/index.tsx index b51eded774..a4fad0e7cb 100644 --- a/packages/gamut-tests/src/index.tsx +++ b/packages/gamut-tests/src/index.tsx @@ -8,7 +8,9 @@ import * as React from 'react'; // See https://www.notion.so/codecademy/Frontend-Unit-Tests-1cbf4e078a6647559b4583dfb6d3cb18 -export const MockGamutProvider: React.FC = ({ children }) => { +export const MockGamutProvider: React.FC<{ children?: React.ReactNode }> = ({ + children, +}) => { return ( {children} diff --git a/packages/gamut/package.json b/packages/gamut/package.json index e77fa70de4..4f9b6a30f1 100644 --- a/packages/gamut/package.json +++ b/packages/gamut/package.json @@ -21,8 +21,8 @@ "peerDependencies": { "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", - "react": ">=17.0.2", - "react-dom": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0", + "react-dom": "^17.0.2 || ^18.2.0" }, "dependencies": { "@codecademy/gamut-icons": "7.9.7", @@ -34,8 +34,8 @@ "@reach/tabs": "^0.16.4", "@types/marked": "^1.1.0", "classnames": "^2.2.5", - "framer-motion": "^4.1.17", - "html-to-react": "^1.4.2", + "framer-motion": "^6.5.1", + "html-to-react": "^1.5.0", "invariant": "^2.2.4", "lodash": "^4.17.5", "marked": "^0.7.0", @@ -45,9 +45,9 @@ "react-hook-form": "^7.21.2", "react-player": "^2.3.1", "react-select": "^5.2.2", - "react-truncate-markup": "^5.1.0", + "react-truncate-markup": "^5.1.2", "react-use": "^15.3.8", - "sanitize-markdown": "^2.6.6" + "sanitize-markdown": "^2.6.7" }, "scripts": { "verify": "tsc --noEmit", diff --git a/packages/gamut/src/Alert/Alert.tsx b/packages/gamut/src/Alert/Alert.tsx index b9be7337e0..a23817acc8 100644 --- a/packages/gamut/src/Alert/Alert.tsx +++ b/packages/gamut/src/Alert/Alert.tsx @@ -6,6 +6,7 @@ import { isValidElement, useState } from 'react'; import * as React from 'react'; import TruncateMarkup from 'react-truncate-markup'; +import { WithChildrenProp } from '..'; import { Box } from '../Box'; import { FillButton, IconButton } from '../Button'; import { alertVariants, placementVariants } from './variants'; @@ -13,7 +14,7 @@ import { alertVariants, placementVariants } from './variants'; export type AlertType = keyof typeof alertVariants; export type AlertPlacements = 'inline' | 'floating'; -export interface AlertProps { +export interface AlertProps extends WithChildrenProp { type?: AlertType; placement?: AlertPlacements; hidden?: boolean; diff --git a/packages/gamut/src/BodyPortal/index.tsx b/packages/gamut/src/BodyPortal/index.tsx index 3d07ff9b8e..0f5a7a8190 100644 --- a/packages/gamut/src/BodyPortal/index.tsx +++ b/packages/gamut/src/BodyPortal/index.tsx @@ -5,6 +5,8 @@ import * as React from 'react'; import ReactDOM from 'react-dom'; import { useIsomorphicLayoutEffect } from 'react-use'; +import { WithChildrenProp } from '..'; + const PortalWrapper = styled .div( system.css({ @@ -18,7 +20,7 @@ const PortalWrapper = styled ) .withComponent(ColorMode); -export const BodyPortal: React.FC = ({ children }) => { +export const BodyPortal: React.FC = ({ children }) => { const [ready, setReady] = useState(false); const mode = useCurrentMode(); diff --git a/packages/gamut/src/Box/props.ts b/packages/gamut/src/Box/props.ts index e312579229..e7aff40e6e 100644 --- a/packages/gamut/src/Box/props.ts +++ b/packages/gamut/src/Box/props.ts @@ -1,6 +1,8 @@ import { system } from '@codecademy/gamut-styles'; import { StyleProps, variance } from '@codecademy/variance'; +import { WithChildrenProp } from '..'; + export const boxProps = variance.compose( system.space, system.border, @@ -60,7 +62,8 @@ export const gridStates = system.states({ export interface BoxProps extends StyleProps, - StyleProps {} + StyleProps, + WithChildrenProp {} export interface FlexBoxProps extends BoxProps, StyleProps {} export interface GridBoxProps extends BoxProps, StyleProps {} diff --git a/packages/gamut/src/Coachmark/index.tsx b/packages/gamut/src/Coachmark/index.tsx index 3d44aae4a3..dfbceb6b2f 100644 --- a/packages/gamut/src/Coachmark/index.tsx +++ b/packages/gamut/src/Coachmark/index.tsx @@ -1,9 +1,10 @@ import { useEffect, useRef, useState } from 'react'; import * as React from 'react'; +import { WithChildrenProp } from '..'; import { Popover, PopoverProps } from '../Popover'; -export type CoachmarkProps = { +export interface CoachmarkProps extends WithChildrenProp { /** * Applied to the element to which the coachmark points. */ @@ -25,7 +26,7 @@ export type CoachmarkProps = { * Props to be passed into the popover component. */ popoverProps?: Partial; -}; +} export const Coachmark: React.FC = ({ children, diff --git a/packages/gamut/src/ConnectedForm/__tests__/useDebouncedField.test.tsx b/packages/gamut/src/ConnectedForm/__tests__/useDebouncedField.test.tsx index c74a8abe6e..9b2711f633 100644 --- a/packages/gamut/src/ConnectedForm/__tests__/useDebouncedField.test.tsx +++ b/packages/gamut/src/ConnectedForm/__tests__/useDebouncedField.test.tsx @@ -9,6 +9,7 @@ import { Input, useDebouncedField, useFormState, + WithChildrenProp, } from '../..'; const mockedSetValue = jest.fn(); @@ -34,7 +35,7 @@ const mockChangeValue = const mockChangeKey = 'remake-intergrade'; const mockCheckboxKey = 'episode-inter-mission'; -const FormWrapper: React.FC = ({ children }) => ( +const FormWrapper: React.FC = ({ children }) => ( null} defaultValues={{ diff --git a/packages/gamut/src/DataList/Controls/SortControl.tsx b/packages/gamut/src/DataList/Controls/SortControl.tsx index 90f3d10478..54e4df1a67 100644 --- a/packages/gamut/src/DataList/Controls/SortControl.tsx +++ b/packages/gamut/src/DataList/Controls/SortControl.tsx @@ -39,6 +39,7 @@ const SortIcon = styled(ArrowChevronDownFilledIcon)( interface SortControlProps { columnKey: string; onSort?: OnSort; + children: string; } const defaultSortOrder = ['asc', 'desc', 'none'] as SortOrder; diff --git a/packages/gamut/src/DataList/Rows/HeaderRow.tsx b/packages/gamut/src/DataList/Rows/HeaderRow.tsx index 825748378c..cd72074e67 100644 --- a/packages/gamut/src/DataList/Rows/HeaderRow.tsx +++ b/packages/gamut/src/DataList/Rows/HeaderRow.tsx @@ -38,52 +38,54 @@ export const Header: HeaderComponent = ({ return ( - {selectable && ( - - {!hideSelectAll && ( - - )} - - )} - {columns.map(({ key, header, sortable, filters, ...colProps }) => { - const rowProperty = key as string; - const renderKey = prefixId(`header-col-${rowProperty}`); - const columnText = header || key; + <> + {selectable && ( + + {!hideSelectAll && ( + + )} + + )} + {columns.map(({ key, header, sortable, filters, ...colProps }) => { + const rowProperty = key as string; + const renderKey = prefixId(`header-col-${rowProperty}`); + const columnText = String(header || key); - return ( - - - {filters && ( - - )} - {sortable ? ( - - {columnText} - - ) : ( - columnText - )} - + return ( + + + {filters && ( + + )} + {sortable ? ( + + {columnText} + + ) : ( + columnText + )} + + + ); + })} + {expandable && ( + + - ); - })} - {expandable && ( - - - - )} + )} + ); }; diff --git a/packages/gamut/src/DataList/Rows/Row.tsx b/packages/gamut/src/DataList/Rows/Row.tsx index 4a55c3dcd0..ce09322ef8 100644 --- a/packages/gamut/src/DataList/Rows/Row.tsx +++ b/packages/gamut/src/DataList/Rows/Row.tsx @@ -94,19 +94,21 @@ export const Row: DataRow = ({ return ( - {render ? ( - render(row) - ) : typeof row[key] === 'string' ? ( - - {row[key]} - - ) : ( - row[key] - )} + <> + {render ? ( + render(row) + ) : typeof row[key] === 'string' ? ( + + {row[key]} + + ) : ( + row[key] + )} + ); })} diff --git a/packages/gamut/src/Flyout/index.tsx b/packages/gamut/src/Flyout/index.tsx index d17e037ddc..ac646fe5f1 100644 --- a/packages/gamut/src/Flyout/index.tsx +++ b/packages/gamut/src/Flyout/index.tsx @@ -2,12 +2,13 @@ import { MiniDeleteIcon } from '@codecademy/gamut-icons'; import { Background, Colors } from '@codecademy/gamut-styles'; import * as React from 'react'; +import { WithChildrenProp } from '..'; import { IconButton } from '../Button'; import { Drawer } from '../Drawer'; import { Overlay } from '../Overlay'; import { Text } from '../Typography'; -export interface FlyoutProps { +export interface FlyoutProps extends WithChildrenProp { /** * Accessibility label for the close button. */ diff --git a/packages/gamut/src/FocusTrap/index.tsx b/packages/gamut/src/FocusTrap/index.tsx index 19680ca04b..136d530216 100644 --- a/packages/gamut/src/FocusTrap/index.tsx +++ b/packages/gamut/src/FocusTrap/index.tsx @@ -2,6 +2,8 @@ import * as React from 'react'; import { FocusOn } from 'react-focus-on'; import { ReactFocusOnProps } from 'react-focus-on/dist/es5/types'; +import { WithChildrenProp } from '..'; + const focusOnStyles = { /** * Prevent the focus-on wrapper from interfering with parent layout @@ -9,7 +11,7 @@ const focusOnStyles = { display: 'contents', }; -export type FocusTrapProps = { +export interface FocusTrapProps extends WithChildrenProp { className?: string; /** * Called when the FocusTrap requests to be closed via the escape key @@ -34,7 +36,7 @@ export type FocusTrapProps = { * Passthrough for react-focus-on library props */ focusOnProps?: ReactFocusOnProps; -}; +} export const FocusTrap: React.FC = ({ className, diff --git a/packages/gamut/src/GridForm/__fixtures__/helpers.tsx b/packages/gamut/src/GridForm/__fixtures__/helpers.tsx index 5b17f654f1..8153498397 100644 --- a/packages/gamut/src/GridForm/__fixtures__/helpers.tsx +++ b/packages/gamut/src/GridForm/__fixtures__/helpers.tsx @@ -1,8 +1,10 @@ import * as React from 'react'; -import { ConnectedForm } from '../..'; +import { ConnectedForm, WithChildrenProp } from '../..'; -type FormContextProps = { mode?: 'onChange' | 'onSubmit' }; +interface FormContextProps extends WithChildrenProp { + mode?: 'onChange' | 'onSubmit'; +} export const FormContext: React.FC = ({ mode = 'onSubmit', diff --git a/packages/gamut/src/List/ListRow.tsx b/packages/gamut/src/List/ListRow.tsx index 9497c522c3..7edc09aaa2 100644 --- a/packages/gamut/src/List/ListRow.tsx +++ b/packages/gamut/src/List/ListRow.tsx @@ -2,7 +2,7 @@ import { AnimatePresence, motion } from 'framer-motion'; import { ComponentProps, forwardRef } from 'react'; import * as React from 'react'; -import { Box } from '..'; +import { Box, WithChildrenProp } from '..'; import { RowEl } from './elements'; import { useListContext } from './ListProvider'; import { PublicListProps } from './types'; @@ -28,7 +28,7 @@ export interface SimpleRowProps extends RowProps { export type ListRowProps = ExpandableRowProps | SimpleRowProps; -const ExpandInCollapseOut: React.FC = ({ children }) => { +const ExpandInCollapseOut: React.FC = ({ children }) => { return ( ( rowBreakpoint={rowBreakpoint} {...wrapperProps} > - {content} - - {expanded && ( - - - {renderExpanded?.()} - - - )} - + <> + {content} + + {expanded && ( + + + {renderExpanded?.()} + + + )} + + ); } diff --git a/packages/gamut/src/Markdown/libs/overrides/Details/index.tsx b/packages/gamut/src/Markdown/libs/overrides/Details/index.tsx index 1b6ed89fd1..a261fa78cc 100644 --- a/packages/gamut/src/Markdown/libs/overrides/Details/index.tsx +++ b/packages/gamut/src/Markdown/libs/overrides/Details/index.tsx @@ -4,8 +4,10 @@ import * as React from 'react'; import { Box } from '../../../../Box'; import { HTMLToReactNode } from '..'; // import styles from '../../../styles/_' -export interface MarkdownDetailsProps - extends HTMLAttributes { + +interface MarkdownHTMLDetailsAttributes + extends Omit, 'children'> {} +export interface MarkdownDetailsProps extends MarkdownHTMLDetailsAttributes { open?: boolean; children?: HTMLToReactNode[]; } @@ -33,7 +35,11 @@ const getStyledDetailChildren = ({ return { summary, - children: [{copiedChildren.map((elem) => elem)}], + children: ( + + <>{copiedChildren.map((elem) => elem)} + + ), }; } }; @@ -56,8 +62,10 @@ export const Details: React.FC = ({ return (
- {editedDetails?.summary} - {editedDetails?.children} + <> + {editedDetails?.summary} + {editedDetails?.children} +
); }; diff --git a/packages/gamut/src/Motion/FadeInSlideOut.tsx b/packages/gamut/src/Motion/FadeInSlideOut.tsx index e283a09040..222c657b20 100644 --- a/packages/gamut/src/Motion/FadeInSlideOut.tsx +++ b/packages/gamut/src/Motion/FadeInSlideOut.tsx @@ -2,6 +2,7 @@ import { timingValues } from '@codecademy/gamut-styles'; import { motion } from 'framer-motion'; import * as React from 'react'; +import { WithChildrenProp } from '..'; import { Box } from '../Box'; const exitDuration = timingValues.fast / 1000; @@ -26,7 +27,7 @@ const motionVariants = { const BaseContainer = motion(Box); -export const FadeInSlideOut: React.FC = ({ children }) => ( +export const FadeInSlideOut: React.FC = ({ children }) => ( = ({ }, [targetRect, isInViewport, onRequestClose]); const handleClickOutside = useCallback( - (e) => { + (e: MouseEvent) => { /** * Allows targetRef to be or contain a button that toggles the popover open and closed. * Without this check it would toggle closed then back open immediately. diff --git a/packages/gamut/src/Popover/elements.tsx b/packages/gamut/src/Popover/elements.tsx index feefd67214..fbfb17f985 100644 --- a/packages/gamut/src/Popover/elements.tsx +++ b/packages/gamut/src/Popover/elements.tsx @@ -4,6 +4,7 @@ import styled from '@emotion/styled'; import { AnimatePresence, motion } from 'framer-motion'; import * as React from 'react'; +import { WithChildrenProp } from '..'; import { BodyPortal } from '../BodyPortal'; import { Box } from '../Box'; import { toolTipBodyAlignments } from '../ToolTip/styles'; @@ -50,7 +51,7 @@ export const PatternContainer = styled.div( ); export const PopoverPortal: React.FC< - Pick + Pick & WithChildrenProp > = ({ animation, isOpen, ...rest }) => animation ? ( diff --git a/packages/gamut/src/PopoverContainer/PopoverContainer.tsx b/packages/gamut/src/PopoverContainer/PopoverContainer.tsx index e5c16a2b0e..afa1c3dfd9 100644 --- a/packages/gamut/src/PopoverContainer/PopoverContainer.tsx +++ b/packages/gamut/src/PopoverContainer/PopoverContainer.tsx @@ -74,7 +74,8 @@ export const PopoverContainer: React.FC = ({ * Without this check it would toggle closed then back open immediately. */ const handleClickOutside = useCallback( - (e) => !targetRef.current?.contains(e.target as Node) && onRequestClose?.(), + (e: MouseEvent | TouchEvent) => + !targetRef.current?.contains(e.target as Node) && onRequestClose?.(), [onRequestClose, targetRef] ); diff --git a/packages/gamut/src/PopoverContainer/types.ts b/packages/gamut/src/PopoverContainer/types.ts index 52c43c92ab..7571295368 100644 --- a/packages/gamut/src/PopoverContainer/types.ts +++ b/packages/gamut/src/PopoverContainer/types.ts @@ -1,5 +1,7 @@ import { RefObject } from 'react'; +import { WithChildrenProp } from '..'; + export type Alignments = | 'top-left' | 'top-right' @@ -64,7 +66,9 @@ export interface PopoverPositionConfig extends PopoverAlignment { alignment: Alignments; } -export interface PopoverContainerProps extends PopoverAlignment { +export interface PopoverContainerProps + extends PopoverAlignment, + WithChildrenProp { className?: string; /** * Whether the popover is rendered. diff --git a/packages/gamut/src/Tag/types.tsx b/packages/gamut/src/Tag/types.tsx index a56417032b..5ac35f1beb 100644 --- a/packages/gamut/src/Tag/types.tsx +++ b/packages/gamut/src/Tag/types.tsx @@ -1,11 +1,13 @@ import { StyleProps } from '@codecademy/variance'; +import { WithChildrenProp } from '..'; import { ButtonProps } from '../Button'; import { colorVariants, tagProps } from './elements'; export interface BaseTagProps extends StyleProps, - StyleProps {} + StyleProps, + WithChildrenProp {} export interface ReadOnlyTagProps extends BaseTagProps { /** * If the DismissButton should be shown. diff --git a/packages/gamut/src/Toast/Toast.tsx b/packages/gamut/src/Toast/Toast.tsx index 9e9abc3f0d..68ef37fe9c 100644 --- a/packages/gamut/src/Toast/Toast.tsx +++ b/packages/gamut/src/Toast/Toast.tsx @@ -5,6 +5,7 @@ import styled from '@emotion/styled'; import { ReactNode, useMemo } from 'react'; import * as React from 'react'; +import { WithChildrenProp } from '..'; import { Box, FlexBox } from '../Box'; import { IconButton } from '../Button/IconButton'; import { FloatingCard } from '../FloatingCard/FloatingCard'; @@ -52,11 +53,11 @@ const IconContainer = styled(FlexBox)( }) ); -export type ToastProps = { +export interface ToastProps extends WithChildrenProp { title?: ReactNode; icon?: ReactNode; onClose: () => void; -}; +} export const Toast: React.FC = ({ title, diff --git a/packages/gamut/src/utils/childrenType.ts b/packages/gamut/src/utils/childrenType.ts new file mode 100644 index 0000000000..c284486b8d --- /dev/null +++ b/packages/gamut/src/utils/childrenType.ts @@ -0,0 +1,3 @@ +export interface WithChildrenProp { + children?: React.ReactNode | React.ReactNode[]; +} diff --git a/packages/gamut/src/utils/generateResponsiveClassnames.ts b/packages/gamut/src/utils/generateResponsiveClassnames.ts index 133df99f6f..33049fe3ed 100644 --- a/packages/gamut/src/utils/generateResponsiveClassnames.ts +++ b/packages/gamut/src/utils/generateResponsiveClassnames.ts @@ -19,12 +19,16 @@ export const generateResponsiveClassnames = ( Object.entries(config).forEach(([propName, propValue]) => { switch (typeof propValue) { case 'number': + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore: Fallthrough case in switch. case 'string': { const mappedClass = styleMap[`${propName}_${propValue}__xs`]; if (mappedClass) { styleList.push(mappedClass); } } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore: Fallthrough case in switch. case 'object': { if (propValue !== null) { Object.entries(propValue).forEach(([mediaSize, mediaPropValue]) => { diff --git a/packages/gamut/src/utils/index.ts b/packages/gamut/src/utils/index.ts index e9dbb0b266..0cf07858c7 100644 --- a/packages/gamut/src/utils/index.ts +++ b/packages/gamut/src/utils/index.ts @@ -1,3 +1,4 @@ +export * from './childrenType'; export * from './createPromise'; -export * from './omitProps'; export * from './generateResponsiveClassnames'; +export * from './omitProps'; diff --git a/packages/markdown-overrides/package.json b/packages/markdown-overrides/package.json index e3ed8ab746..a8c07d0326 100644 --- a/packages/markdown-overrides/package.json +++ b/packages/markdown-overrides/package.json @@ -16,8 +16,8 @@ "build": "nx build @codecademy/markdown-overrides" }, "peerDependencies": { - "react": ">=17.0.2", - "react-dom": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0", + "react-dom": "^17.0.2 || ^18.2.0" }, "dependencies": { "@codecademy/gamut-styles": "14.2.5", diff --git a/packages/markdown-overrides/src/ErrorBlock/index.tsx b/packages/markdown-overrides/src/ErrorBlock/index.tsx index 011e1fa302..0c2331942f 100644 --- a/packages/markdown-overrides/src/ErrorBlock/index.tsx +++ b/packages/markdown-overrides/src/ErrorBlock/index.tsx @@ -1,14 +1,11 @@ import cx from 'classnames'; import * as React from 'react'; +import { GenericMarkdownProps } from '../types'; // eslint-disable-next-line gamut/no-css-standalone import styles from './styles.module.scss'; -export type ErrorBlockProps = { - className?: string; -}; - -export const ErrorBlock: React.FC = ({ +export const ErrorBlock: React.FC = ({ children, className, }) => { diff --git a/packages/markdown-overrides/src/PseudoBlock/index.tsx b/packages/markdown-overrides/src/PseudoBlock/index.tsx index 59f07dade3..1fa0e9636a 100644 --- a/packages/markdown-overrides/src/PseudoBlock/index.tsx +++ b/packages/markdown-overrides/src/PseudoBlock/index.tsx @@ -1,14 +1,11 @@ import cx from 'classnames'; import * as React from 'react'; +import { GenericMarkdownProps } from '../types'; // eslint-disable-next-line gamut/no-css-standalone import styles from './styles.module.scss'; -export type PseudoBlockProps = { - className?: string; -}; - -export const PseudoBlock: React.FC = ({ +export const PseudoBlock: React.FC = ({ children, className, }) => { diff --git a/packages/markdown-overrides/src/types.ts b/packages/markdown-overrides/src/types.ts new file mode 100644 index 0000000000..20e3247d2f --- /dev/null +++ b/packages/markdown-overrides/src/types.ts @@ -0,0 +1,4 @@ +export type GenericMarkdownProps = { + className?: string; + children?: React.ReactNode; +}; diff --git a/packages/monaco/package.json b/packages/monaco/package.json index 4a6b10e929..bea1860429 100644 --- a/packages/monaco/package.json +++ b/packages/monaco/package.json @@ -13,8 +13,8 @@ "url": "git+https://github.com/Codecademy/gamut/packages/monaco.git" }, "peerDependencies": { - "react": ">=17.0.2", - "react-dom": ">=17.0.2" + "react": "^17.0.2 || ^18.2.0", + "react-dom": "^17.0.2 || ^18.2.0" }, "dependencies": { "@codecademy/gamut": "51.7.3", @@ -23,10 +23,9 @@ "@emotion/styled": "^11.3.0", "monaco-editor": "0.20.0", "react-monaco-editor": "0.46.0", - "react-resize-detector": "5.2.0" + "react-resize-detector": "7.1.2" }, "devDependencies": { - "@types/react-resize-detector": "5.0.0", "monaco-editor-webpack-plugin": "1.9.1" }, "scripts": { diff --git a/packages/styleguide/.storybook/components/Docs/DocsContainer.tsx b/packages/styleguide/.storybook/components/Docs/DocsContainer.tsx index e321d57d1d..ff43dabee6 100644 --- a/packages/styleguide/.storybook/components/Docs/DocsContainer.tsx +++ b/packages/styleguide/.storybook/components/Docs/DocsContainer.tsx @@ -1,6 +1,7 @@ import { MDXProvider } from '@mdx-js/react'; import { ThemeProvider, ensure as ensureTheme } from '@storybook/theming'; import { components as htmlComponents } from '@storybook/components'; +import Helmet from 'react-helmet'; import { DocsContext, SourceContainer, @@ -109,7 +110,9 @@ export const DocsContainer: React.FC<{ context: DocsContextProps }> = ({ cache={createEmotionCache({ speedy: false })} theme={coreTheme} > - + + + diff --git a/packages/styleguide/.storybook/main.ts b/packages/styleguide/.storybook/main.ts index d71341b6da..df2fee60d5 100644 --- a/packages/styleguide/.storybook/main.ts +++ b/packages/styleguide/.storybook/main.ts @@ -57,10 +57,18 @@ module.exports = { configs.css().module.rules ); + config.module.rules.push({ + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }); + config.resolve = { ...config.resolve, alias: { ...emotionless(config.resolve.alias), + // Prevent usage of ESM version of htmlparser2 + htmlparser2$: 'htmlparser2/lib/index.js', '~styleguide/blocks': path.resolve(__dirname, './components/'), '@codecademy/storybook-addon-variance': path.resolve( __dirname, diff --git a/packages/styleguide/package.json b/packages/styleguide/package.json index f19c03a9a5..d88ab07ffe 100644 --- a/packages/styleguide/package.json +++ b/packages/styleguide/package.json @@ -48,8 +48,8 @@ "lodash": "4.17.20", "polished": "^4.1.2", "postcss-loader": "^3.0.0", - "react": "17.0.2", - "react-dom": "17.0.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", "sass": "1.56.2", "sass-loader": "^10.1.1", "storybook-addon-designs": "^6.0.1", diff --git a/packages/styleguide/stories/Atoms/FormInputs/Input.stories.mdx b/packages/styleguide/stories/Atoms/FormInputs/Input.stories.mdx index a74099d5e3..49b96a7aba 100644 --- a/packages/styleguide/stories/Atoms/FormInputs/Input.stories.mdx +++ b/packages/styleguide/stories/Atoms/FormInputs/Input.stories.mdx @@ -1,9 +1,4 @@ -import { - FormGroup, - GridBox, - Input, - ReactRecurlyStyles, -} from '@codecademy/gamut'; +import { FormGroup, GridBox, Input } from '@codecademy/gamut'; import { AmexIcon, StreakIcon, ViewIcon } from '@codecademy/gamut-icons'; import title from '@codecademy/macros/lib/title.macro'; import { PropsTable } from '@codecademy/storybook-addon-variance'; @@ -12,7 +7,6 @@ import { Canvas, Meta, Story } from '@storybook/addon-docs/blocks'; ` element for handling "text", "number" and "file" input types', diff --git a/packages/styleguide/stories/Brand Labs/Molecules/AppBar.stories.mdx b/packages/styleguide/stories/Brand Labs/Molecules/AppBar.stories.mdx index 172f54def9..cc3fedd474 100644 --- a/packages/styleguide/stories/Brand Labs/Molecules/AppBar.stories.mdx +++ b/packages/styleguide/stories/Brand Labs/Molecules/AppBar.stories.mdx @@ -1,5 +1,4 @@ -import { AppBar, AppBarSection } from '@codecademy/gamut/src'; -import { Logo } from '@codecademy/gamut-labs/src'; +import { AppBar, AppBarSection, Logo } from '@codecademy/gamut-labs/src'; import title from '@codecademy/macros/lib/title.macro'; import { PropsTable } from '@codecademy/storybook-addon-variance'; import { Canvas, Meta, Story } from '@storybook/addon-docs/blocks'; diff --git a/packages/styleguide/stories/Molecules/Coachmark/index.stories.mdx b/packages/styleguide/stories/Molecules/Coachmark/index.stories.mdx index bd53ff0da7..a39410eda9 100644 --- a/packages/styleguide/stories/Molecules/Coachmark/index.stories.mdx +++ b/packages/styleguide/stories/Molecules/Coachmark/index.stories.mdx @@ -1,4 +1,4 @@ -import { Coachmark } from '@codecademy/gamut-labs/src'; +import { Coachmark } from '@codecademy/gamut/src'; import title from '@codecademy/macros/lib/title.macro'; import { PropsTable } from '@codecademy/storybook-addon-variance'; import { Canvas, Meta, Story } from '@storybook/addon-docs/blocks'; diff --git a/packages/styleguide/stories/Molecules/Popover/index.stories.mdx b/packages/styleguide/stories/Molecules/Popover/index.stories.mdx index db3f218a07..6e4420638d 100644 --- a/packages/styleguide/stories/Molecules/Popover/index.stories.mdx +++ b/packages/styleguide/stories/Molecules/Popover/index.stories.mdx @@ -1,4 +1,4 @@ -import { Popover } from '@codecademy/gamut-labs/src'; +import { Popover } from '@codecademy/gamut/src'; import title from '@codecademy/macros/lib/title.macro'; import { PropsTable } from '@codecademy/storybook-addon-variance'; import { Canvas, Meta, Story } from '@storybook/addon-docs/blocks'; diff --git a/packages/styleguide/stories/Organisms/ConnectedForm/ConnectedFormInputs.stories.mdx b/packages/styleguide/stories/Organisms/ConnectedForm/ConnectedFormInputs.stories.mdx index 41b9e7b48c..d4be9bf942 100644 --- a/packages/styleguide/stories/Organisms/ConnectedForm/ConnectedFormInputs.stories.mdx +++ b/packages/styleguide/stories/Organisms/ConnectedForm/ConnectedFormInputs.stories.mdx @@ -1,9 +1,9 @@ import { Box, - ConnectedFormInput, + ConnectedInput, ConnectedRadioGroupInput, List, -} from '@codecademy/gamut'; +} from '@codecademy/gamut/src'; import title from '@codecademy/macros/lib/title.macro'; import { PropsTable } from '@codecademy/storybook-addon-variance'; import { Meta } from '@storybook/addon-docs/blocks'; @@ -13,7 +13,7 @@ import { ListRowRenderer } from './utils'; -We have a selection of `ConnectedFormInput` components that are visually identical to their un-connected FormInput counterparts. Please reference the links below for component-specific prop and styling configuration: +We have a selection of `ConnectedInput` components that are visually identical to their un-connected FormInput counterparts. Please reference the links below for component-specific prop and styling configuration: diff --git a/packages/styleguide/stories/Organisms/Markdown/index.stories.mdx b/packages/styleguide/stories/Organisms/Markdown/index.stories.mdx index bcb0a5b7a1..fa3f3147db 100644 --- a/packages/styleguide/stories/Organisms/Markdown/index.stories.mdx +++ b/packages/styleguide/stories/Organisms/Markdown/index.stories.mdx @@ -1,4 +1,4 @@ -import { Markdown, TextDeprecated } from '@codecademy/gamut/src'; +import { Markdown, Text } from '@codecademy/gamut/src'; import title from '@codecademy/macros/lib/title.macro'; import { PropsTable } from '@codecademy/storybook-addon-variance'; import { Canvas, Meta, Story } from '@storybook/addon-docs/blocks'; @@ -70,7 +70,7 @@ If you need to override a link, iframe, or table, you also need to provide the ` export const overrides = { a: { - component: TextDeprecated, + component: Text, }, }; diff --git a/packages/variance/package.json b/packages/variance/package.json index 7112600049..f7a64507b0 100644 --- a/packages/variance/package.json +++ b/packages/variance/package.json @@ -38,8 +38,8 @@ "devDependencies": { "@emotion/jest": "^11.3.0", "@emotion/styled": "^11.3.0", - "@types/react-test-renderer": "^17.0.1", - "react": "17.0.2", - "react-test-renderer": "17.0.2" + "@types/react-test-renderer": "^17.0.2", + "react": "^17.0.2", + "react-test-renderer": "^17.0.2" } } diff --git a/script/jest/base-setup.js b/script/jest/base-setup.js index 7493dcfa1b..73799f7870 100644 --- a/script/jest/base-setup.js +++ b/script/jest/base-setup.js @@ -1,4 +1,9 @@ // Set fixed date Date.now = jest.fn(() => new Date(2011, 6, 1).valueOf()); +// eslint-disable-next-line @typescript-eslint/no-empty-function +function noop() {} + +Object.defineProperty(window, 'scrollTo', { value: noop, writable: true }); + require('mutationobserver-shim'); diff --git a/yarn.lock b/yarn.lock index 832dbe9d9f..c7204aa263 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,16 +15,16 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/cli@7.17.10": - version "7.17.10" - resolved "https://registry.npmjs.org/@babel/cli/-/cli-7.17.10.tgz#5ea0bf6298bb78f3b59c7c06954f9bd1c79d5943" - integrity sha512-OygVO1M2J4yPMNOW9pb+I6kFGpQK77HmG44Oz3hg8xQIl5L/2zq+ZohwAdSaqYgVwM0SfmPHZHphH4wR8qzVYw== +"@babel/cli@7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/cli/-/cli-7.20.7.tgz#8fc12e85c744a1a617680eacb488fab1fcd35b7c" + integrity sha512-WylgcELHB66WwQqItxNILsMlaTd8/SO6SgTTjMp4uCI7P4QyH1r3nqgFmO3BfM4AtfniHgFMH3EpYFj/zynBkQ== dependencies: "@jridgewell/trace-mapping" "^0.3.8" commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" - glob "^7.0.0" + glob "^7.2.0" make-dir "^2.1.0" slash "^2.0.0" optionalDependencies: @@ -81,6 +81,11 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== +"@babel/compat-data@^7.20.5": + version "7.20.10" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" + integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== + "@babel/core@*", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": version "7.18.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" @@ -124,27 +129,26 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.13.10": - version "7.13.10" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" - integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== +"@babel/core@7.20.12": + version "7.20.12" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" + integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-compilation-targets" "^7.13.10" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helpers" "^7.13.10" - "@babel/parser" "^7.13.10" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helpers" "^7.20.7" + "@babel/parser" "^7.20.7" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.12" + "@babel/types" "^7.20.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" - lodash "^4.17.19" + json5 "^2.2.2" semver "^6.3.0" - source-map "^0.5.0" "@babel/core@^7.0.1", "@babel/core@^7.15.0", "@babel/core@^7.18.5": version "7.18.10" @@ -212,6 +216,15 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" + integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" @@ -262,6 +275,17 @@ browserslist "^4.20.2" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.13.0": version "7.13.11" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" @@ -395,6 +419,14 @@ "@babel/template" "^7.18.6" "@babel/types" "^7.18.9" +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + "@babel/helper-get-function-arity@^7.14.5", "@babel/helper-get-function-arity@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" @@ -458,7 +490,7 @@ dependencies: "@babel/types" "^7.13.12" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== @@ -500,6 +532,20 @@ "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" +"@babel/helper-module-transforms@^7.20.11": + version "7.20.11" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.10" + "@babel/types" "^7.20.7" + "@babel/helper-optimise-call-expression@^7.12.13", "@babel/helper-optimise-call-expression@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" @@ -611,6 +657,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -658,6 +711,11 @@ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + "@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" @@ -668,6 +726,11 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + "@babel/helper-validator-option@^7.12.17": version "7.14.5" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" @@ -707,7 +770,7 @@ "@babel/traverse" "^7.13.17" "@babel/types" "^7.13.17" -"@babel/helpers@^7.13.10", "@babel/helpers@^7.18.9": +"@babel/helpers@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== @@ -716,6 +779,15 @@ "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" +"@babel/helpers@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" + integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + "@babel/highlight@^7.10.4": version "7.14.5" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" @@ -753,11 +825,6 @@ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz#66fd41666b2d7b840bd5ace7f7416d5ac60208d4" integrity sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA== -"@babel/parser@^7.13.10", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": - version "7.18.11" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" - integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== - "@babel/parser@^7.14.5": version "7.17.7" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz#fc19b645a5456c8d6fdb6cecd3c66c0173902800" @@ -773,11 +840,21 @@ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78" integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ== +"@babel/parser@^7.18.10", "@babel/parser@^7.18.11": + version "7.18.11" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== + "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== +"@babel/parser@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" + integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -1198,7 +1275,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-jsx@^7.18.6": +"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== @@ -2107,7 +2184,7 @@ "@babel/plugin-transform-react-jsx-development" "^7.12.17" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" -"@babel/preset-react@^7.14.5", "@babel/preset-react@^7.17.12": +"@babel/preset-react@^7.14.5", "@babel/preset-react@^7.17.12", "@babel/preset-react@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -2128,7 +2205,7 @@ "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-transform-typescript" "^7.13.0" -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.17.12": +"@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== @@ -2156,7 +2233,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.17", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.17", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.17.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== @@ -2177,6 +2254,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.18.3": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" + integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/template@^7.12.13", "@babel/template@^7.14.5", "@babel/template@^7.3.3": version "7.14.5" resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" @@ -2222,6 +2306,15 @@ "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@babel/traverse@^7.12.11": version "7.14.8" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz#c0253f02677c5de1a8ff9df6b0aacbec7da1a8ce" @@ -2299,6 +2392,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.7": + version "7.20.12" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" + integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.7.2": version "7.17.10" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5" @@ -2332,6 +2441,15 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz#860ce718b0b73f4009e153541faff2cb6b85d047" @@ -2434,6 +2552,24 @@ debug "^4.3.2" lodash "^4.17.20" +"@emotion/babel-plugin@^11.10.5": + version "11.10.5" + resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" + integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.1" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.1.3" + "@emotion/babel-plugin@^11.3.0": version "11.3.0" resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz#3a16850ba04d8d9651f07f3fb674b3436a4fb9d7" @@ -2507,6 +2643,11 @@ resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@emotion/hash@^0.9.0": + version "0.9.0" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== + "@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.2", "@emotion/is-prop-valid@^0.8.6": version "0.8.8" resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -2542,6 +2683,11 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + "@emotion/react@^11.1.1", "@emotion/react@^11.4.0": version "11.4.0" resolved "https://registry.npmjs.org/@emotion/react/-/react-11.4.0.tgz#2465ad7b073a691409b88dfd96dc17097ddad9b7" @@ -2577,6 +2723,17 @@ "@emotion/utils" "^1.0.0" csstype "^3.0.2" +"@emotion/serialize@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" + integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== + dependencies: + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" + csstype "^3.0.2" + "@emotion/sheet@0.9.4": version "0.9.4" resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" @@ -2626,6 +2783,11 @@ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@emotion/unitless@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== + "@emotion/utils@0.11.3": version "0.11.3" resolved "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" @@ -2636,6 +2798,11 @@ resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af" integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA== +"@emotion/utils@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== + "@emotion/weak-memoize@0.2.5", "@emotion/weak-memoize@^0.2.5": version "0.2.5" resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" @@ -3851,15 +4018,6 @@ resolved "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.2.tgz#43e470537b6ec2c23510c07812616d5aa27a17cd" integrity sha512-A2e18XzPMrIh35nhIdE4uoqRzoIpEU5vZYuQN4S3Ee1zkGdYC27DP12pewbw/RLgPHzaE4kx/YqxMzebOpm0dA== -"@loadable/component@^5.15.2": - version "5.15.2" - resolved "https://registry.npmjs.org/@loadable/component/-/component-5.15.2.tgz#b6c418d592e0a64f16b1d614ca9d3b1443d3b498" - integrity sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw== - dependencies: - "@babel/runtime" "^7.7.7" - hoist-non-react-statics "^3.3.1" - react-is "^16.12.0" - "@mdx-js/loader@^1.6.22": version "1.6.22" resolved "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz#d9e8fe7f8185ff13c9c8639c048b123e30d322c4" @@ -3904,6 +4062,59 @@ resolved "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== +"@motionone/animation@^10.12.0": + version "10.15.1" + resolved "https://registry.npmjs.org/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" + integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== + dependencies: + "@motionone/easing" "^10.15.1" + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/dom@10.12.0": + version "10.12.0" + resolved "https://registry.npmjs.org/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed" + integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw== + dependencies: + "@motionone/animation" "^10.12.0" + "@motionone/generators" "^10.12.0" + "@motionone/types" "^10.12.0" + "@motionone/utils" "^10.12.0" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/easing@^10.15.1": + version "10.15.1" + resolved "https://registry.npmjs.org/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693" + integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== + dependencies: + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/generators@^10.12.0": + version "10.15.1" + resolved "https://registry.npmjs.org/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c" + integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== + dependencies: + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/types@^10.12.0", "@motionone/types@^10.15.1": + version "10.15.1" + resolved "https://registry.npmjs.org/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb" + integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== + +"@motionone/utils@^10.12.0", "@motionone/utils@^10.15.1": + version "10.15.1" + resolved "https://registry.npmjs.org/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438" + integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== + dependencies: + "@motionone/types" "^10.15.1" + hey-listen "^1.0.8" + tslib "^2.3.1" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -6168,13 +6379,6 @@ resolved "https://registry.npmjs.org/@types/konami-code-js/-/konami-code-js-0.8.0.tgz#dd7b3bd23266d0d1c6bfcad870232b1a3788a883" integrity sha512-7fhuggz5XuuQJxWhVL/5i3oQEQ80jjp3yvwaWlwNjFbM40BELnzV4qKeyPDLtjsHC9NG6E7XT22epH9eDZC3zg== -"@types/loadable__component@^5.13.4": - version "5.13.4" - resolved "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.4.tgz#a4646b2406b1283efac1a9d9485824a905b33d4a" - integrity sha512-YhoCCxyuvP2XeZNbHbi8Wb9EMaUJuA2VGHxJffcQYrJKIKSkymJrhbzsf9y4zpTmr5pExAAEh5hbF628PAZ8Dg== - dependencies: - "@types/react" "*" - "@types/lodash@4.14.168": version "4.14.168" resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" @@ -6352,20 +6556,6 @@ dependencies: "@types/react" "^17" -"@types/react-helmet@^6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.0.tgz#af586ed685f4905e2adc7462d1d65ace52beee7a" - integrity sha512-PYRoU1XJFOzQ3BHvWL1T8iDNbRjdMDJMT5hFmZKGbsq09kbSqJy61uwEpTrbTNWDopVphUT34zUSVLK9pjsgYQ== - dependencies: - "@types/react" "*" - -"@types/react-resize-detector@5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/react-resize-detector/-/react-resize-detector-5.0.0.tgz#18ac4e6d518581bec6345845b7f08232f4cca8a5" - integrity sha512-JTqR0G+RcC6Guqi/JXQBq3jewflumUGd4fDUucmZN9L1d8TZuRHzDTtrmgYWrgLvRTBTV6FjegmLeV1UnrIuzw== - dependencies: - "@types/react" "*" - "@types/react-syntax-highlighter@11.0.5": version "11.0.5" resolved "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz#0d546261b4021e1f9d85b50401c0a42acb106087" @@ -6380,6 +6570,13 @@ dependencies: "@types/react" "*" +"@types/react-test-renderer@^17.0.2": + version "17.0.2" + resolved "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.2.tgz#5f800a39b12ac8d2a2149e7e1885215bcf4edbbf" + integrity sha512-+F1KONQTBHDBBhbHuT2GNydeMpPuviduXIVJRB7Y4nma4NR5DrTJfMMZ+jbhEHbpwL+Uqhs1WXh4KHiyrtYTPg== + dependencies: + "@types/react" "^17" + "@types/react-transition-group@^4.4.0": version "4.4.4" resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" @@ -7832,6 +8029,15 @@ babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1, babel-plugin-macros@^2.8 cosmiconfig "^6.0.0" resolve "^1.12.0" +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + babel-plugin-named-asset-import@^0.3.1: version "0.3.7" resolved "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" @@ -7945,10 +8151,10 @@ babel-preset-codecademy@6.0.1-alpha.042681.0: babel-plugin-react-anonymous-display-name "0.0.1" babel-plugin-transform-dynamic-import "^2.1.0" -babel-preset-codecademy@6.0.1-alpha.8dfef4.0: - version "6.0.1-alpha.8dfef4.0" - resolved "https://registry.npmjs.org/babel-preset-codecademy/-/babel-preset-codecademy-6.0.1-alpha.8dfef4.0.tgz#df6dd339e58b45e7fecc65a97c9b58705141750d" - integrity sha512-ysOx72Opnv5LwCq8zu9R6cjxmuTYWsBlHVFiDvRInFX3kNhUd/KW4HJJjId9L1T7NAlK7J+HVoeOSFXknn/bZA== +babel-preset-codecademy@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/babel-preset-codecademy/-/babel-preset-codecademy-7.0.0.tgz#37a551726032315fe7588b9aa94741badc25059f" + integrity sha512-0tAjVN1r9voyz+GLrekJOUcnsRa5szHSx/p2A+Tgfqj96sIEQusPCoh+5oJLB2acGYN7nnvpD8mK6S7jrwhvAA== dependencies: "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-decorators" "^7.12.1" @@ -7963,7 +8169,7 @@ babel-preset-codecademy@6.0.1-alpha.8dfef4.0: "@babel/plugin-transform-destructuring" "^7.12.1" "@babel/plugin-transform-runtime" "^7.12.1" "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.1" + "@babel/preset-react" "^7.18.6" babel-plugin-react-anonymous-display-name "0.0.1" babel-plugin-transform-dynamic-import "^2.1.0" @@ -10498,6 +10704,15 @@ dom-serializer@^1.0.1: domhandler "^4.0.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -10518,7 +10733,7 @@ domelementtype@^2.0.1, domelementtype@^2.1.0: resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== -domelementtype@^2.2.0: +domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -10544,13 +10759,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - domhandler@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" @@ -10565,6 +10773,13 @@ domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" +domhandler@^5.0, domhandler@^5.0.1, domhandler@^5.0.2: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -10573,15 +10788,6 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.4.2: - version "2.4.4" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" - integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils@^2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -10591,6 +10797,15 @@ domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -10853,6 +11068,11 @@ entities@^2.0.0: resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0: + version "4.4.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + entities@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz#62915f08d67353bb4eb67e3d62641a4059aec656" @@ -12088,23 +12308,24 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -framer-motion@^4.1.17: - version "4.1.17" - resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-4.1.17.tgz#4029469252a62ea599902e5a92b537120cc89721" - integrity sha512-thx1wvKzblzbs0XaK2X0G1JuwIdARcoNOW7VVwjO8BUltzXPyONGAElLu6CiCScsOQRI7FIk/45YTFtJw5Yozw== +framer-motion@^6.5.1: + version "6.5.1" + resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7" + integrity sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw== dependencies: - framesync "5.3.0" + "@motionone/dom" "10.12.0" + framesync "6.0.1" hey-listen "^1.0.8" - popmotion "9.3.6" - style-value-types "4.1.4" + popmotion "11.0.3" + style-value-types "5.0.0" tslib "^2.1.0" optionalDependencies: "@emotion/is-prop-valid" "^0.8.2" -framesync@5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/framesync/-/framesync-5.3.0.tgz#0ecfc955e8f5a6ddc8fdb0cc024070947e1a0d9b" - integrity sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA== +framesync@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20" + integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA== dependencies: tslib "^2.1.0" @@ -12569,7 +12790,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2: +glob@^7.1.2, glob@^7.2.0: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -13027,11 +13248,6 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -he@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/he/-/he-0.5.0.tgz#2c05ffaef90b68e860f3fd2b54ef580989277ee2" - integrity sha1-LAX/rvkLaOhg8/0rVO9YCYknfuI= - he@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -13166,15 +13382,14 @@ html-tags@^3.1.0: resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== -html-to-react@^1.4.2: - version "1.4.5" - resolved "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.5.tgz#59091c11021d1ef315ef738460abb6a4a41fe1ce" - integrity sha512-KONZUDFPg5OodWaQu2ymfkDmU0JA7zB1iPfvyHehTmMUZnk0DS7/TyCMTzsLH6b4BvxX15g88qZCXFhJWktsmA== +html-to-react@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/html-to-react/-/html-to-react-1.5.0.tgz#6e0cf47ae1b091ba2f28a3832389fbce4d199ccc" + integrity sha512-tjihXBgaJZRRYzmkrJZ/Qf9jFayilFYcb+sJxXXE2BVLk2XsNrGeuNCVvhXmvREULZb9dz6NFTBC96DTR/lQCQ== dependencies: - domhandler "^3.3.0" - htmlparser2 "^5.0" + domhandler "^5.0" + htmlparser2 "^8.0" lodash.camelcase "^4.3.0" - ramda "^0.27.1" html-void-elements@^1.0.0: version "1.0.5" @@ -13208,15 +13423,15 @@ htmlparser2@^3.10.1: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^5.0: - version "5.0.1" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" - integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== +htmlparser2@^8.0: + version "8.0.1" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== dependencies: - domelementtype "^2.0.1" - domhandler "^3.3.0" - domutils "^2.4.2" - entities "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" http-cache-semantics@^4.1.0: version "4.1.0" @@ -15378,6 +15593,11 @@ json5@^2.2.1: resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsonc-parser@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" @@ -18116,14 +18336,14 @@ polished@^4.0.5, polished@^4.1.2: dependencies: "@babel/runtime" "^7.13.17" -popmotion@9.3.6: - version "9.3.6" - resolved "https://registry.npmjs.org/popmotion/-/popmotion-9.3.6.tgz#b5236fa28f242aff3871b9e23721f093133248d1" - integrity sha512-ZTbXiu6zIggXzIliMi8LGxXBF5ST+wkpXGEjeTUDUOCdSQ356hij/xjeUdv0F8zCQNeqB1+PR5/BB+gC+QLAPw== +popmotion@11.0.3: + version "11.0.3" + resolved "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9" + integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA== dependencies: - framesync "5.3.0" + framesync "6.0.1" hey-listen "^1.0.8" - style-value-types "4.1.4" + style-value-types "5.0.0" tslib "^2.1.0" portfinder@^1.0.28: @@ -19142,21 +19362,11 @@ quick-lru@^5.1.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -raf-schd@^4.0.2: - version "4.0.3" - resolved "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" - integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== - ramda@^0.21.0: version "0.21.0" resolved "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= -ramda@^0.27.1: - version "0.27.1" - resolved "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" - integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -19275,7 +19485,7 @@ react-docgen@^5.0.0: node-dir "^0.1.10" strip-indent "^3.0.0" -react-dom@17.0.2, react-dom@^17.0.2: +react-dom@^17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== @@ -19388,16 +19598,16 @@ react-inspector@^5.1.0: is-dom "^1.0.0" prop-types "^15.0.0" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - "react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^18.0.0: version "18.1.0" resolved "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" @@ -19472,15 +19682,12 @@ react-remove-scroll@^2.4.0: use-callback-ref "^1.2.3" use-sidecar "^1.0.1" -react-resize-detector@5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-5.2.0.tgz#992083834432308c551a8251a2c52306d9d16718" - integrity sha512-PQAc03J2eyhvaiWgEdQ8+bKbbyGJzLEr70KuivBd1IEmP/iewNakLUMkxm6MWnDqsRPty85pioyg8MvGb0qC8A== +react-resize-detector@7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz#8ef975dd8c3d56f9a5160ac382ef7136dcd2d86c" + integrity sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw== dependencies: - lodash "^4.17.20" - prop-types "^15.7.2" - raf-schd "^4.0.2" - resize-observer-polyfill "^1.5.1" + lodash "^4.17.21" react-select@^5.2.2: version "5.2.2" @@ -19538,7 +19745,7 @@ react-syntax-highlighter@^13.5.3: prismjs "^1.21.0" refractor "^3.1.0" -react-test-renderer@17.0.2, react-test-renderer@^17.0.2: +react-test-renderer@^17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ== @@ -19567,10 +19774,10 @@ react-transition-group@^4.3.0: loose-envify "^1.4.0" prop-types "^15.6.2" -react-truncate-markup@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/react-truncate-markup/-/react-truncate-markup-5.1.0.tgz#632f263a7d70925ab6368d5620ef32f066c2857a" - integrity sha512-TTp8gj63w/o5jQC7HnLMEeAHp9jjSxFlA5lzklvPzcSubcurkEI4g0YjW67YG1yNAJHqQwCadj4mTUvz58S1wQ== +react-truncate-markup@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/react-truncate-markup/-/react-truncate-markup-5.1.2.tgz#bf09785854d95e20028b257831ffdf32d08c8fa7" + integrity sha512-eEq6T8Rs+wz98cRYzQECGFNBfXwRYraLg/kz52f6DRBKmzxqB+GYLeDkVe/zrC+2vh5AEwM6nSYFvDWEBljd0w== dependencies: line-height "0.3.1" memoize-one "^5.1.1" @@ -19602,7 +19809,7 @@ react-use@15.3.8, react-use@^15.3.8: ts-easing "^0.2.0" tslib "^2.0.0" -react@17.0.2, react@^17.0.2: +react@^17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -19870,6 +20077,11 @@ regenerator-runtime@^0.13.10: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: version "0.13.7" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" @@ -20428,13 +20640,12 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sanitize-markdown@^2.6.6: - version "2.6.6" - resolved "https://registry.npmjs.org/sanitize-markdown/-/sanitize-markdown-2.6.6.tgz#7d1b1e9d13601403b86c00be627040f5a934cb1e" - integrity sha512-YFS/3rzUnqtizs65vTV7d5c7dqFQPqhXRyM6/89zVzK2CHjeMjxiRxHE48x5EkxRuvO5Qb978zSNTmasTYO1Zw== +sanitize-markdown@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/sanitize-markdown/-/sanitize-markdown-2.6.7.tgz#335d7627fe15339cf5be5a0ae78590c097007e33" + integrity sha512-w0exIpQ6Zk/q4yUZNgYcxz5sO1o+y3zYeJlHXp+AGKUPOy9wUoKUpu6/+qVlW6oGMvQ72N/6Gx8q/tZG/CKxSA== dependencies: assignment "2.0.0" - he "0.5.0" sass-graph@2.2.5: version "2.2.5" @@ -21701,10 +21912,10 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -style-value-types@4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/style-value-types/-/style-value-types-4.1.4.tgz#80f37cb4fb024d6394087403dfb275e8bb627e75" - integrity sha512-LCJL6tB+vPSUoxgUBt9juXIlNJHtBMy8jkXzUJSBzeHWdBu6lhzHqCvLVkXFGsFIlNa2ln1sQHya/gzaFmB2Lg== +style-value-types@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad" + integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA== dependencies: hey-listen "^1.0.8" tslib "^2.1.0" @@ -21731,6 +21942,11 @@ stylis@4.0.13, stylis@^4.0.3, stylis@^4.0.6: resolved "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== +stylis@4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + stylus-loader@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz#0ba499e744e7fb9d9b3977784c8639728a7ced8c"